Anda dapat menggunakan JAM() fungsi:
SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9
Sayangnya, kinerja kueri ini akan mengerikan , segera setelah Anda melewati beberapa ribu baris - fungsi tidak dapat diindeks, jadi akan ada pemindaian tabel penuh setiap kali kueri ini dijalankan.
Apa yang kami lakukan dalam situasi serupa:kami membuat kolom lain updatetime_hour
, mengindeksnya, dan mengisinya pada sisipan (dan diperbarui saat pembaruan); maka query menjadi cepat:
SELECT * FROM 'table' WHERE `updatetime_hour` = 9
Ya, kami telah mendenormalisasi data, dan ini sedikit lebih banyak pembersihan, tetapi saya belum melihat solusi yang lebih cepat. (Kami mempertimbangkan dan mengukur pemicu penyisipan dan pembaruan untuk mengisi updatetime_hour
dari updatetime
, tetapi memutuskan untuk tidak melakukannya; lihat apakah mereka akan berguna bagi Anda.)