ストアド プロシージャでのパラメーター スニッフィングを回避するために、パラメーターをローカル変数にコピーすることを提案する人を見てきました。あなたが持っていると言う
CREATE PROCEDURE List_orders_3 @fromdate datetime AS
DECLARE @fromdate_copy datetime
SELECT @fromdate_copy = @fromdate
SELECT * FROM Orders WHERE OrderDate > @fromdate_copy
(これはhttp://www.sommarskog.se/query-plan-mysteries.htmlから取得しましたが、完全に理解するには詳細が必要です)。
しかし、これはクエリ プラン キャッシュとクエリ プラン オプティマイザーに実際に何をもたらすのでしょうか? オプティマイザが @fromdate_copy について仮定をしないことが本当なら、完全なテーブル スキャンになる可能性が最も高い計画をキャッシュしないのはなぜですか (仮定をしないので、他の何かを生成するにはどうすればよいでしょうか? )?
この手法は基本的に「入力がないとうまくいくが、入力もひどく実行されない」ようなものですか?