Mam duży stół z 22 milionami rekordów. Chcę wykonać następny zapytanie:Zapytanie MySQL według daty z dużym inwerterem
select auto_alerts from alerts_stat where endDate > "2012-12-01"
celu zwiększenia wydajności dodałem indeks btree dla endData polu:
CREATE INDEX endDate_index USING BTREE ON alerts_stat(endDate)
Po zacznę analizować plan wykonania kwerendy:
Kiedy chcę pobierz parametry od 15 do 7 dni wcześniej:
explain select alerts_sp from alerts_stat
where endDate between CURDATE() - 15 and CURDATE() - 7;
Mam następny plan wykonania, który przetworzy 2 762 088 wierszy.
'1', 'SIMPLE', 'browser_plugin_alerts_stat', 'range', 'endDate_index', 'endDate_index', '4', NULL, '2762088', 'Using where'
Kiedy zwiększyć interwał o jeden dzień, otrzymałem:
explain select alerts_sp from alerts_stat
where endDate between CURDATE() - 15 and CURDATE() - 6;
wytłumaczyć powiedział Plan MySQL przetwarzać wszystkie 22,923,126 wierszy.
'1', 'SIMPLE', 'browser_plugin_alerts_stat', 'ALL', 'endDate_index', NULL, NULL, NULL, '22932390', 'Using where'
Na przykład wybierz bez żadnych warunków w GDZIE proces 22.255.642.
Czy mogę poprawić plan wykonania? Może gdzieś się mylę, czy normalny jest MySQL?
Dzięki. Pomyśl, że to moja sprawa. Jest to więc zachowanie specyficzne dla MySQL. Czy mogę w jakiś sposób poprawić zapytanie, aby uzyskać np. Sumę ("alerts_sp") dla dużych interwałów? – Taky