SQL: slechte prestaties ondanks index

Ik werd zojuist geconfronteerd met het volgende prestatieprobleem van een SQL-database: in een SQL-tabel met de naam "gebruikers" met ~ 1.000.000 vermeldingen duurde het vandaag onaanvaardbaar 28 seconden om het aantal registraties te bepalen. 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 DATE-functieaanroep: de geïndexeerde kolom "created" wordt verzonden door de DATE-functie en maakt de index niet effectief. 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