クエリに OPTION(OPTIMIZE FOR UNKNOWN)
を追加します (最後の句として)パラメーターのスニッフィングを防止します。構文と説明については、クエリ ヒント
に関するドキュメントを参照してください。 .
ストアド プロシージャを初めて実行するときに SQL Server が行うことは、渡されたパラメーターの実行計画を最適化することです。これは、Parameter Sniffing
と呼ばれるプロセスで行われます。 .
通常、実行プランは SQL Server によってキャッシュされるため、SQL Server は同じクエリに対して毎回再コンパイルする必要はありません。次にプロシージャが実行されるとき、SQL Server はその中のクエリに対して実行プランを再利用します。 .
私があなたに与えたオプションは、実行計画が特定のために最適化されるべきではないことを SQL コンパイラに伝えます。 パラメータではなく、任意の ストアド プロシージャに渡されるパラメータ。
ドキュメントを引用するには:
場合によっては、ストアド プロシージャはパラメーター スニッフィングの恩恵を受けることができますが、そうでない場合もあります。パラメーター スニッフィングの恩恵を受けないストアド プロシージャについては、ストアド プロシージャのパラメーターのいずれかを使用する各クエリにオプションを追加できます。