Du ber bara om två kolumner i din fråga, så index kan/borde gå dit:
- DatumTid
- Laddningstid
Ett annat sätt att snabba upp din fråga kan vara att dela DateTime-fältet i två:datum och tid.
På detta sätt kan db gruppera direkt på datumfältet istället för att beräkna DATUM(...).
REDIGERAD:
Om du föredrar att använda en utlösare, skapa en ny kolumn (DATE) och kalla den newdate , och försök med detta (jag kan inte prova det nu för att se om det är korrekt):
CREATE TRIGGER upd_check BEFORE INSERT ON SpeedMonitor
FOR EACH ROW
BEGIN
SET NEW.newdate=DATE(NEW.DateTime);
END
REDIGERAD IGEN:
Jag har precis skapat en db med samma tabell speedmonitor fylld med cirka 900 000 poster.
Då kör jag frågan SELECT newdate,AVG(LoadTime) loadtime FROM speedmonitor GROUP BY newdate och det tog ungefär 100 s!!
Ta bort index på newdate-fältet (och rensa cacheminnet med RESET QUERY CACHE
och SPOLA TABELL
), tog samma fråga 0,6 s!!!
Bara för jämförelse:fråga VÄLJ DATUM(DateTime),AVG(LoadTime) laddningstid FRÅN speedmonitor GROUP BY DATE(DateTime)
tog 0,9s.
Så jag antar att indexet på newdate inte är bra:ta bort det.
Jag ska lägga till så många poster jag kan nu och testa två frågor igen.
SLUTLIG REDIGERING:
Ta bort index på newdate- och DateTime-kolumner, med 8 miljoner poster på speedmonitor-tabellen, här är resultaten:
- välja och gruppera på newdate-kolumnen:7,5s
- välja och gruppera i fältet DATE(DateTime):13,7s
Jag tycker att det är en bra snabbhet.
Det tar tid att köra frågan i mysql-kommandotolken.