SQL: dålig prestanda trots index

Jag konfronterades precis med följande prestandaproblem för en SQL-databas: I en SQL-tabell som heter "användare" med ~ 1 000 000 poster tog bestämningen av antalet registreringar idag en oacceptabel 28 sekunder. Registreringstiderna sparades i formatet "Ymd H: i: s" i kolumnen "skapad".


Frågan som används

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

ledde till den här laddningstiden, även om det redan fanns ett index i kolumnen "skapad" i DATETIME-formatet

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

hade ställts in. Anledningen till den dåliga prestandan är DATE-funktionsanropet: Den indexerade kolumnen "skapad" skickas av DATE-funktionen och gör indexet ineffektivt. Frågeoptimeraren känner bara till "skapad", men inte resultatet av DATE (skapad). Den optimerade frågan

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

leder till önskat resultat på 0,4 sekunder.

Tillbaka