HOUR()を使用できます。 機能:
SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9
残念ながら、このクエリのパフォーマンスはひどいになります 、数千行を超えるとすぐに-関数はインデックスに登録できないため、このクエリが実行されるたびに全表スキャンが行われます。
同様の状況で行ったこと:別の列updatetime_hour
を作成しました 、インデックスを作成し、挿入時にデータを入力します(更新時に更新します)。その後、クエリは高速になります:
SELECT * FROM 'table' WHERE `updatetime_hour` = 9
はい、データを非正規化しました。これはもう少しハウスキーピングですが、より高速な解決策はまだありません。 (updatetime_hour
に入力するための挿入トリガーと更新トリガーを検討し、測定しました updatetime
から 、しかしパフォーマンスのために反対することにしました。それらがあなたに役立つかどうかを確認してください。)