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.