SQL: malbona agado malgraŭ indekso

Mi ĵus alfrontis la sekvan rendimentan problemon de SQL-datumbazo: En SQL-tabelo nomata "uzantoj" kun ĉirkaŭ 1,000,000 da eniroj, la determino de la nombro de aliĝoj hodiaŭ daŭris neakcepteblajn 28 sekundojn. En la kolumno "kreita", la horoj de la aliĝoj estis konservitaj en la formato "Ymd H: i: s".


La uzata demando

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

kondukis al ĉi tiu ŝarĝa tempo, kvankam jam estis indekso en la "kreita" kolumno de la formato DATETIME

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

estis starigita. La kialo de la malbona agado estas la DATE-funkcio-alvoko: La indeksita kolumno "kreita" estas sendita de la DATE-funkcio kaj igas la indekson senefika. La Demanda Optimigilo nur scias "kreita", sed ne la rezulton de DATE (kreita). La optimumigita konsulto

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

kondukas al la dezirata rezulto en tempo de 0,4 sekundoj.

Reen