Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL SELECT WHERE datetime correspond au jour (et pas nécessairement à l'heure)

JAMAIS JAMAIS utilisez un sélecteur comme DATE(datecolumns) = '2012-12-24' - c'est un tueur de performance :

  • il calculera DATE() pour toutes les lignes, y compris celles qui ne correspondent pas
  • il sera impossible d'utiliser un index pour la requête

C'est beaucoup plus rapide à utiliser

SELECT * FROM tablename 
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'

car cela permettra l'utilisation de l'index sans calcul.

MODIFIER

Comme l'a souligné Used_By_Already, depuis la réponse initiale en 2012, des versions de MySQL ont émergé, où l'utilisation de '23:59:59' comme fin de journée n'est plus sûre. Une version mise à jour devrait lire

SELECT * FROM tablename 
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'

L'essentiel de la réponse, c'est-à-dire l'évitement d'un sélecteur sur une expression calculée, est bien sûr toujours valable.