SQL: dårlig præstation trods indeks

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, selvom 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.

Tilbage