.netからパラメータ化されたSQLを呼び出しています。理由はわかりませんが、パラメーターが含まれていない場合と比較して、パラメーターがNULLであるかどうかを確認すると、SQLの実行が非常に遅くなります。
したがって、この:
exec sp_executesql N'
SELECT [id]
FROM [tblAddress] (nolock)
WHERE 1 = 1
AND ([id] = @id OR @id IS NULL)
',N'@id int',
@id=4395
これよりも速く実行されます:
exec sp_executesql N'
SELECT [id]
FROM [tblAddress] (nolock)
WHERE 1 = 1
AND ([id] = @id)
',N'@id int',
@id=4395
SQLプロファイラーを実行すると、100万行を超える上位のクエリの期間は175で、読み取りは3720ですが、2番目のクエリの期間は1で、読み取りは3つだけです。
なぜそのような違いがあり、どのようにそれを改善できるのでしょうか?