Ответ 1
НИКОГДА НИКОГДА использовать селектор типа 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'
Суть ответа, т.е. избегание селектора по вычисленному выражению, конечно же, остается.