4

SQL Server 2008 を使用して、単純なストアド プロシージャを作成しました。その内容は次のとおりです。

DELETE FROM [ABC].[dbo].[LookUpPermissions] 
WHERE Code = @Code

最近のコード レビューで、DBA は「パラメーター スニッフィングを追加する」必要があると述べました。これは、パラメーター スニッフィングを説明する必要があることを意味すると考えています。過去にこれを行ったことがなく、クエリでパフォーマンスの問題が発生していないため、不要だと思います。

答えはユーザーの好みかもしれないと思いますが、パラメーターのスニッフィングを考慮するのがベスト プラクティスでしょうか? ストアド プロシージャが小さなデータセットで呼び出され、使用頻度が低く、パフォーマンスの問題がない場合、必要ですか?


編集これはWHERE
句で 使用されるパラメーターにのみ適用されますか、またはたとえば、INSERTステートメントのすべてのパラメーターを説明する必要がありますか?

4

2 に答える 2

3

このような単一の値の単純な検索は、パラメーター スニッフィングに対して脆弱ではありません。渡されたパラメーターの結果が大きく異なり、最適な実行計画が以前に生成されたものと異なる場合は、より懸念されます。

例として、日付列が @start_date と @end_date の間にある行を検索するクエリを考えてみましょう。2 日の日付範囲でプロシージャを呼び出すと、1 年の日付範囲に最適ではない実行計画が生成/キャッシュされる場合があります。

于 2011-12-22T20:13:16.437 に答える
-1

パラメーター スニッフィングは、Microsoft が SQL クエリを最適化するために使用するもう 1 つの組み込みの "スマートなもの" (インライン スペル/文法チェックを思い出してください) です。入力パラメーターをスニッフィングすることにより、SQL Server は、どのキャッシュ クエリ プランが使用するのに最適なプランであるかについて、知識に基づいた推測を行います。常に正しい選択をするとは限りません。

SQL をだまして pramater sniffing を使わないようにする方法については、こちらをお読みください

于 2011-12-27T14:18:14.793 に答える