SQL: prestazioni scadenti nonostante index

Mi sono appena trovato di fronte al seguente problema di prestazioni di un database SQL: in una tabella SQL chiamata "utenti" con ~ 1.000.000 di voci, la determinazione del numero di registrazioni oggi ha richiesto un inaccettabile 28 secondi. Gli orari delle registrazioni sono stati salvati nel formato “Ymd H: i: s” nella colonna “creato”.


La query utilizzata

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

ha portato a questo tempo di caricamento, sebbene ci fosse già un indice nella colonna "creato" del formato DATETIME

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

era stato impostato. Il motivo dello scarso rendimento è la chiamata alla funzione di DATE: La colonna indicizzata “creata” viene inviata dalla funzione DATE e rende inefficace l'indice. Query Optimizer conosce solo "creato", ma non il risultato di DATE (creato). La query ottimizzata

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

porta al risultato desiderato in un tempo di 0,4 secondi.

Indietro