MAI MAI utilizzare un selettore come DATE(datecolumns) = '2012-12-24'
- è un killer di prestazioni:
- calcolerà
DATE()
per tutte le righe, compresi quelli, che non corrispondono
- che renderà impossibile di utilizzare un indice per la query
E 'molto più veloce da utilizzare
SELECT * FROM tablename
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'
poiché ciò consentirà l'uso dell'indice senza calcolo.
EDIT
Come sottolineato da Used_By_Already, nel tempo dal momento che la risposta iniziale che nel 2012, ci sono emersi versioni di MySQL, dove utilizzando '23: 59: 59' come la 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 nocciolo della risposta, vale a dire la prevenzione di un selettore su un'espressione calcolata, naturalmente si trova ancora.
fonte
2012-12-31 17:24:07
See risposta da John Woo a http://stackoverflow.com/questions/14769026/mysql-select-where-timestamp-today – ekerner