以下の2つのクエリのうち、どちらが高速ですか?この表には100M以上のレコードが含まれています。だから私は、where句でISNULLを使用するのが最初に変数に値を代入し、where句で変数を使用するのと同じであるかどうかを知りたいだけです。日付範囲クエリ方法のパフォーマンス比較
declare @dt datetime
select COUNT(*) from pandl
where PaymentDate >= ISNULL(@dt, convert(nvarchar(10),getdate(), 121))
select @dt = ISNULL(@dt, convert(nvarchar(10),getdate(), 121))
select COUNT(*) from pandl
where PaymentDate >= @dt
両方を実行してどちらが高速であるか確認しましたか? SQLプロファイラを使用して各クエリの実行計画を確認しましたか? – Pondlife
「今」のいくつの異なる値を使用しますか? 2つ目のクエリは、必要に応じて現在の日付/時刻を1回キャプチャしてから検索します。 – HABO
@ user92546それは良い点ですが、最初のクエリの途中で 'getdate()'が複数回評価されても(私は検証するためにいくつかのテストを実行する必要があります)、変換がラウンドするので真夜中の前にクエリが開始されていて、真夜中後にまだ処理していた(そして新しい値を 'getdate()'に代入しているかどうかは本当に問題になります)。私はあなたに一度気に入っていることに一度気に入っていますが、それが本当に悪い時には「ベストではない」と明確にしたいと思っています。 –