NIGDY, PRZENIGDY użyj selektora takiego jak DATE(datecolumns) = '2012-12-24'
- to zabójca wydajności:
- obliczy
DATE()
dla wszystkich wierszy, także tych, które nie pasują - uniemożliwi to użycie indeksu do zapytania
Jest znacznie szybszy w użyciu
SELECT * FROM tablename
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'
ponieważ pozwoli to na użycie indeksu bez obliczeń.
EDYTUJ
Jak zauważył Used_By_Already, w czasie od pierwszej odpowiedzi w 2012 roku pojawiły się wersje MySQL, w których używanie „23:59:59” jako końca dnia nie jest już bezpieczne. Zaktualizowana wersja powinna brzmieć
SELECT * FROM tablename
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'
Istota odpowiedzi, tj. unikanie selektora na wyrażeniu wyliczanym, oczywiście nadal obowiązuje.