フルテキストインデックスを使用して製品(250,000行)を検索するストアドプロシージャがあります。なぜこれらの2つのクエリのパフォーマンスが異なるのですか?
保存されたprocは、全文検索条件であるパラメータをとります。このパラメータはnullになる可能性があるため、ヌルチェックを追加して、クエリの実行が突然遅くなりました。ここで
-- This is normally a parameter of my stored proc
DECLARE @Filter VARCHAR(100)
SET @Filter = 'FORMSOF(INFLECTIONAL, robe)'
-- #1 - Runs < 1 sec
SELECT TOP 100 ID FROM dbo.Products
WHERE CONTAINS(Name, @Filter)
-- #2 - Runs in 18 secs
SELECT TOP 100 ID FROM dbo.Products
WHERE @Filter IS NULL OR CONTAINS(Name, @Filter)
実行計画は、次のとおりです。
クエリ#1
クエリ#2
私は実行計画に精通していないだと認めなければなりません。唯一明らかな違いは、結合が異なることです。私はヒントを追加しようとしますが、私のクエリには参加していないので、それをどうやって行うのか分かりません。
また、IX_SectionIDというインデックスが使用されているのはなぜか分かりません。なぜなら、それはカラムのSectionIDのみを含むインデックスであり、そのカラムはどこでも使用されていないからです。
ニースの記事 - OPTION(RECOMPILE) '追加'実際に第二のクエリのパフォーマンスの問題を(解決が別の問題は、 '()'昇給が含まれていることですパラメータがNULLの場合はエラーですが、別の問題です)。 –