Stai solo chiedendo due colonne nella tua query, quindi gli indici potrebbero/dovrebbero andare lì:
- DataOra
- Tempo di caricamento
Un altro modo per velocizzare la tua query potrebbe essere dividere il campo DateTime in due:data e ora.
In questo modo db può raggrupparsi direttamente sul campo data invece di calcolare DATE(...).
MODIFICATO:
Se preferisci utilizzare un attivatore, crea una nuova colonna (DATA) e chiamala nuova data , e prova con questo (non posso provarlo ora per vedere se è corretto):
CREATE TRIGGER upd_check BEFORE INSERT ON SpeedMonitor
FOR EACH ROW
BEGIN
SET NEW.newdate=DATE(NEW.DateTime);
END
MODIFICATO ANCORA:
Ho appena creato un db con la stessa tabella speedmonitor riempita con circa 900.000 record.
Quindi eseguo la query SELECT newdate,AVG(LoadTime) loadtime FROM speedmonitor GROUP BY newdate
e ci sono voluti circa 100 secondi!!
Rimozione dell'indice sul campo newdate (e svuotamento della cache usando RESET QUERY CACHE
e FLUSH TABLES
), la stessa query ha richiesto 0,6 secondi!!!
Solo per confronto:query SELECT DATE(DateTime),AVG(LoadTime) loadtime FROM speedmonitor GROUP BY DATE(DateTime)
ci sono voluti 0,9 secondi.
Quindi suppongo che l'indice su newdate non sia buono:rimuovilo.
Aggiungerò tutti i record che posso ora e testerò di nuovo due query.
MODIFICA FINALE:
Rimozione degli indici nelle colonne newdate e DateTime, con 8 milioni di record sulla tabella dello speedmonitor, ecco i risultati:
- selezione e raggruppamento nella colonna newdate:7.5s
- selezione e raggruppamento nel campo DATE(DateTime):13,7s
Penso che sia un buon aumento di velocità.
Ci vuole tempo per eseguire la query all'interno del prompt dei comandi di mysql.