MAI MAI usa un selettore come DATE(datecolumns) = '2012-12-24'
- è un killer di prestazioni:
- calcolerà
DATE()
per tutte le righe, comprese quelle, che non corrispondono - sarebbe impossibile utilizzare un indice per la query
È molto più veloce da usare
SELECT * FROM tablename
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'
poiché ciò consentirà l'utilizzo dell'indice senza calcolo.
MODIFICA
Come sottolineato da Used_By_Already, nel tempo trascorso dalla risposta iniziale nel 2012, sono emerse versioni di MySQL, in cui l'utilizzo di "23:59:59" come fine della giornata non è più sicuro. Una versione aggiornata dovrebbe leggere
SELECT * FROM tablename
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'
Il succo della risposta, ovvero l'evitare un selettore su un'espressione calcolata, ovviamente è ancora valido.