TIDAK PERNAH menggunakan pemilih seperti DATE(datecolumns) = '2012-12-24'
- ini adalah pembunuh kinerja:
- itu akan menghitung
DATE()
untuk semua baris, termasuk yang tidak cocok
- itu akan membuat tidak mungkin untuk menggunakan indeks untuk permintaan
Ini jauh lebih cepat untuk digunakan
SELECT * FROM tablename
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'
karena ini akan memungkinkan penggunaan indeks tanpa perhitungan.
EDIT
Seperti yang ditunjukkan oleh Used_By_Already, pada saat sejak jawaban awal pada tahun 2012, telah muncul versi MySQL, di mana menggunakan '23: 59: 59 'sebagai hari akhir tidak lagi aman. Versi yang diperbarui harus dibaca
SELECT * FROM tablename
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'
Inti dari jawabannya, yaitu penghindaran pemilih pada ekspresi yang dihitung, tentu saja masih berlaku.