SQL: slechte prestaties ondanks index

Ik werd zojuist geconfronteerd met het volgende prestatieprobleem van een SQL-database: In een SQL-tabel genaamd "gebruikers" met ~ 1.000.000 ingangen duurde de bepaling van het aantal registraties vandaag een onaanvaardbare 28 seconden. De tijden van de registraties werden opgeslagen in het "Ymd H: i: s" formaat in de "aangemaakte" kolom.


De gebruikte zoekopdracht

SELECT COUNT(ID) FROM users WHERE DATE(created) = '2014-12-21';

leidde tot deze laadtijd, hoewel er al een index stond in de "aangemaakte" kolom van het DATETIME-formaat

ALTER TABLE `users` ADD INDEX `created` (`created`);

was ingesteld. De reden voor de slechte prestatie is de functieaanroep van DATE: de geïndexeerde kolom "created" wordt verzonden door de functie DATE en maakt de index ineffectief. De Query Optimizer kent alleen "gemaakt", maar niet het resultaat van DATE (gemaakt). De geoptimaliseerde query

SELECT COUNT(ID) FROM users WHERE created BETWEEN '2014-12-21' AND '2014-12-21 23:59:59';

leidt tot het gewenste resultaat in een tijd van 0,4 seconden.

Terug