SQL: gyenge teljesítmény az index ellenére

Éppen egy SQL-adatbázis következő teljesítményproblémájával szembesültem: Egy ~ 1 000 000 bejegyzéssel rendelkező "felhasználók" nevű SQL-táblázatban elfogadhatatlan 28 másodpercbe telt a mai regisztrációk számának meghatározása. A regisztrációk idejét az „Ymd H: i: s” formátumban mentették a „létrehozott” oszlopba.


A használt lekérdezés

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

vezetett ehhez a betöltési időhöz, bár a DATETIME formátumú "létrehozott" oszlopban már volt index

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

be volt állítva. A gyenge teljesítmény oka a DATE függvényhívás: A "létrehozott" indexelt oszlopot a DATE függvény küldi és hatástalanná teszi az indexet. A Lekérdezés-optimalizáló csak a "létrehozott" információt tudja, de a DATE (létrehozva) eredményét nem. Az optimalizált lekérdezés

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

0,4 másodperc alatt a kívánt eredményhez vezet.

Vissza