Keluarkan timestamp
. Anda nilai ke date
jika Anda ingin sintaks sederhana. Seperti ini:
SELECT *
FROM tbl
WHERE timestamp_col::date = '2011-12-01'; -- date literal
Namun, dengan tabel besar ini akan lebih cepat:
SELECT *
FROM tbl
WHERE timestamp_col >= '2011-12-01 0:0' -- timestamp literal
AND timestamp_col < '2011-12-02 0:0';
Alasan:kueri kedua tidak harus mengubah setiap nilai dalam tabel dan dapat menggunakan indeks sederhana pada kolom stempel waktu. Ekspresinya menyindir.
Catatan tidak termasuk batas atas (<
bukannya <=
) untuk pemilihan yang benar.
Anda dapat menebusnya dengan membuat indeks pada ekspresi seperti ini:
CREATE INDEX tbl_ts_date_idx ON tbl (cast(timestamp_col AS date));
Kemudian versi pertama kueri akan secepat yang didapat.