НИКОГДА не используйте селектор вроде DATE(datecolumns) = '2012-12-24'
- это убийца производительности:
- он будет рассчитывать
DATE()
для всех строк, включая те, которые не соответствуют
- это сделает невозможным использование индекса для запроса
Гораздо быстрее использовать
SELECT * FROM tablename
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'
так как это позволит использовать индекс без расчета.
РЕДАКТИРОВАТЬ
Как указывает Used_By_Already, за время, прошедшее с момента первоначального ответа в 2012 году, появились версии MySQL, в которых использование «23:59:59» в качестве конца дня уже небезопасно. Обновленная версия должна читать
SELECT * FROM tablename
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'
Суть ответа, то есть отказ от селектора в вычисляемом выражении, конечно же, остается в силе.