Jeg blev lige konfronteret med følgende ydeevneproblem i en SQL-database: I en SQL-tabel kaldet "brugere" med ~ 1.000.000 poster tog det i uacceptable 28 sekunder at bestemme antallet af registreringer i dag. Registreringstiderne blev gemt i formatet “Ymd H: i: s” i kolonnen “oprettet”.
Den anvendte forespørgsel
SELECT COUNT(ID) FROM users WHERE DATE(created) = '2014-12-21';
førte til denne indlæsningstid, skønt der allerede var et indeks i kolonnen "oprettet" i DATETIME-formatet
ALTER TABLE `users` ADD INDEX `created` (`created`);
var sat. Årsagen til den dårlige ydeevne er funktionsopkaldet for DATE: Den indekserede kolonne "oprettet" sendes af funktionen DATE og gør indekset ineffektivt. Forespørgselsoptimering kender kun "oprettet", men ikke resultatet af DATE (oprettet). Den optimerede forespørgsel
SELECT COUNT(ID) FROM users WHERE created BETWEEN '2014-12-21' AND '2014-12-21 23:59:59';
fører til det ønskede resultat på et tidspunkt på 0,4 sekunder.