ALDRIG NÅGONSIN använd en väljare som DATE(datecolumns) = '2012-12-24'
- det är en prestationsdödare:
- den kommer att beräkna
DATE()
för alla rader, inklusive de, som inte matchar - det kommer att göra det omöjligt att använda ett index för frågan
Det är mycket snabbare att använda
SELECT * FROM tablename
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'
eftersom detta tillåter indexanvändning utan beräkning.
REDIGERA
Som påpekat av Used_By_Already, under tiden sedan det första svaret 2012, har det dykt upp versioner av MySQL, där det inte längre är säkert att använda '23:59:59' som ett dagsslut. En uppdaterad version bör läsa
SELECT * FROM tablename
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'
Kontentan av svaret, det vill säga undvikandet av en väljare på ett beräknat uttryck, består naturligtvis fortfarande.