Ho una grande tabella con 22 milioni di record. Voglio eseguire query successiva:Query MySQL per data con grande inverval
select auto_alerts from alerts_stat where endDate > "2012-12-01"
Per migliorare le prestazioni ho aggiunto indice BTREE per EndData campo:
CREATE INDEX endDate_index USING BTREE ON alerts_stat(endDate)
Dopo comincio ad analizzare piano di esecuzione di query:
Quando voglio ottenere parametri da 15 a 7 giorni prima:
explain select alerts_sp from alerts_stat
where endDate between CURDATE() - 15 and CURDATE() - 7;
Ho ottenuto il prossimo piano di esecuzione per elaborare 2.762.088 righe.
'1', 'SIMPLE', 'browser_plugin_alerts_stat', 'range', 'endDate_index', 'endDate_index', '4', NULL, '2762088', 'Using where'
Quando ho aumentare l'intervallo di un giorno, ho ricevuto:
explain select alerts_sp from alerts_stat
where endDate between CURDATE() - 15 and CURDATE() - 6;
spiegare detto piano MySQL elaborare tutti 22,923,126 righe.
'1', 'SIMPLE', 'browser_plugin_alerts_stat', 'ALL', 'endDate_index', NULL, NULL, NULL, '22932390', 'Using where'
Ad esempio selezionare senza condizioni nel processo WHERE 22.925.642.
Posso migliorare il piano di esecuzione? Forse ho un errore da qualche parte, o il normale comportamento di MySQL?
Grazie. Penso che sia il mio caso. Quindi è un comportamento specifico di MySQL. Posso migliorare la query in qualche modo per ottenere la somma di esempio ('alerts_sp') per un grande intervallo? – Taky