Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL SELEZIONA DOVE datetime corrisponde al giorno (e non necessariamente all'ora)

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.