Saya punya tabel yang berisi kolom datetime. Saya ingin mengembalikan semua catatan pada hari tertentu terlepas dari waktu. Atau dengan kata lain, jika meja saya hanya berisi 4 catatan berikut, maka hanya tanggal 2 dan 3 yang akan dikembalikan jika saya membatasi 2012-12-25.
2012-12-24 00:00:00
2012-12-25 00:00:00
2012-12-25 06:00:00
2012-12-26 05:00:00
Jawaban:
TIDAK PERNAH menggunakan pemilih seperti
DATE(datecolumns) = '2012-12-24'
- ini adalah pembunuh kinerja:DATE()
untuk semua baris, termasuk yang tidak cocokIni jauh lebih cepat untuk digunakan
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
Inti dari jawabannya, yaitu penghindaran pemilih pada ekspresi yang dihitung, tentu saja masih berlaku.
sumber
WHERE col >= '2012-12-25' AND col < '2012-12-25' + INTERVAL 1 DAY
. Ini menghindari 0 waktu dan bekerja untukDATE
,DATETIME
,DATETIME(6)
, dll Dan penawaran dengan lompatan-hari, dll... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'
mungkin berpotensi bekerja lebih baik (jika Anda memiliki indeks pada date_column) daripadaDATE
.sumber
BETWEEN
solusinya ... ada yang ditandai?BETWEEN
hanyalah cara untuk menulisfield >= value1 and fied<= value2
.Anda bisa menggunakan
%
:sumber