Mysql
 sql >> Database >  >> RDS >> Mysql

Query MySQL lenta

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.