MySQL クエリの where 句のIF
条件によって、実行が大幅に遅くなりますか?
1 つのサンプル クエリを次に示します。
select * from alert_details_v adv
where (if(day(last_day(now()))<DAY(adv.alert_date),
day(last_day(now())),DAY(adv.alert_date))-adv.alert_trigger_days)<=day(now());
サンプルデータ:
alert_id alert_date alert_trigger_days
==================================================
1 2013-09-14 00:00:00 6
2 2013-09-13 00:00:00 5
alert_date
: ユーザーが入力した日付alert_trigger_days
: アラートがトリガーされる実際の日付までの日数。
クエリロジックについての簡単な説明:- ここでは、現在の月の最終日がalert_date
(データベース列) の日よりも短いかどうかを調べようとしています。前日のいずれかが考慮されます。
基本的に、このテーブルはアラート情報を格納するためのものです。したがって、ユーザーがある月の 30 日を選択し、アラートが毎月繰り返される場合、2 月は 30 日が見つからないため、レコードが表示されません。
私の質問は次のとおりです: テーブルに数十万のレコードがある場合、(上記のサンプル クエリのように) where 句で if 条件を使用したクエリを実行すると、クエリの実行が大幅にまたはわずかに遅くなりますか?