Przykladowe zapytanie
SELECT * FROM notowaniee WHERE indeks_id=1 AND DATA<=1189302400 LIMIT 2
trwa 0.9271 sekundy. Przeczytalem artykul z linka, sprawdzilem describe'm jak wyglada sytuacja z kluczami. Dla powyzszego zapytania sprawdzanych jest 2292 rekordy.
W skrypcie wykonywany jest tez update (badalem czas wykonania, jest na poziomie 0,14 s - czyli dla 200 rekordow same update'y trwaja 28 sekund).
W przypadku update'a rowniez w warunku znajduja sie tylko pola indeks_id i data, wiec do tej sytuacji odnosi sie jeden i ten sam indeks.
Tak wyglada zapytanie tworzace tabele:
CREATE TABLE IF NOT EXISTS `notowaniee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`indeks_id` int(11) NOT NULL,
`kurs_otwarcia` float(8,2) NOT NULL,
`minimum` float(8,2) NOT NULL,
`maksimum` float(8,2) NOT NULL,
`kurs_zamkniecia` float(8,2) NOT NULL,
`wolumen` int(7) NOT NULL,
`data` int(11) NOT NULL,
`trend` enum('nd','+','-') collate utf8_polish_ci NOT NULL,
`srednia1` float(8,2) NOT NULL,
`srednia2` float(8,2) NOT NULL,
`srednia3` float(8,2) NOT NULL,
`adxDecyzja` enum('kupno','sprzedaz','czekaj') collate utf8_polish_ci NOT NULL,
`adx` float(6,2) NOT NULL,
PRIMARY KEY (`id`),
KEY `indeksid_index` USING BTREE (`indeks_id`),
KEY `Index_4` USING BTREE (`data`,`indeks_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=491694 ;
Zapytania wykonuja sie szybciej jesli w warunku podam id (pierwsze zapytanie wykonuje sie okolo 10 razy szybciej).
Poki co nie mam pomyslu jak rozwiazac problem, w tej chwili skrypt dziala a ja zaobserwowalem, ze po zalozeniu indeksow dziala on gorzej niz przed (wczesniej wykonywal sie w okolo 70s, teraz jest to juz 100s - a ilosc danych sie nie zmienila).