ASLA ASLA şunun gibi bir seçici kullanmayın DATE(datecolumns) = '2012-12-24'
- bu bir performans katilidir:
DATE()
eşleşmeyenler dahil tüm satırlar için hesaplar
- sorgu için bir dizin kullanmayı imkansız hale getirecek
Kullanması çok daha hızlı
SELECT * FROM tablename
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'
çünkü bu, hesaplamadan indeks kullanımına izin verecektir.
DÜZENLE
Used_By_Also tarafından işaret edildiği gibi, 2012'deki ilk cevaptan bu yana, MySQL'in gün sonu olarak "23: 59: 59" kullanımının artık güvenli olmadığı sürümleri ortaya çıktı. Güncellenmiş bir sürüm şöyle olmalıdır
SELECT * FROM tablename
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'
Cevabın özü, yani hesaplanmış bir ifadede bir seçiciden kaçınma, elbette hala geçerli.