SQL: dålig prestanda trots index

Jag konfronterades precis med följande prestandaproblem i en SQL-databas: I en SQL-tabell som heter "användare" med ~ 1 000 000 poster tog bestämningen av antalet registreringar idag i oacceptabla 28 sekunder. Tiderna för registreringarna 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 dålig prestanda är funktionsanropet för DATE: Den indexerade kolumnen "skapad" skickas av funktionen DATE 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å en tid av 0,4 sekunder.

Tillbaka