NOOIT OOIT gebruik een selector zoals DATE(datecolumns) = '2012-12-24'
- het is een prestatiemoordenaar:
- het berekent
DATE()
voor alle rijen, inclusief die, die niet overeenkomen - het maakt het onmogelijk om een index voor de zoekopdracht te gebruiken
Het is veel sneller te gebruiken
SELECT * FROM tablename
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'
omdat dit indexgebruik zonder berekening mogelijk maakt.
BEWERKEN
Zoals opgemerkt door Used_By_Already, zijn er sinds het eerste antwoord in 2012 versies van MySQL verschenen, waarbij het gebruik van '23:59:59' als dageinde niet langer veilig is. Een bijgewerkte versie zou moeten lezen
SELECT * FROM tablename
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'
De kern van het antwoord, d.w.z. het vermijden van een selector op een berekende uitdrukking, blijft natuurlijk staan.