Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL SELECT WHERE datetime corresponde ao dia (e não necessariamente à hora)


NUNCA NUNCA use um seletor como DATE(datecolumns) = '2012-12-24' - é um assassino de desempenho:
  • ele calculará DATE() para todas as linhas, incluindo aquelas, que não correspondem
  • tornará impossível usar um índice para a consulta

É muito mais rápido de usar
SELECT * FROM tablename 
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'

pois isso permitirá o uso do índice sem cálculo.

EDITAR

Conforme apontado por Used_By_Already, desde a resposta inicial em 2012, surgiram versões do MySQL, onde o uso de '23:59:59' como final do dia não é mais seguro. Uma versão atualizada deve ler
SELECT * FROM tablename 
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'

A essência da resposta, ou seja, evitar um seletor em uma expressão calculada, é claro, ainda permanece.