我看到有人建议将参数复制到局部变量,以避免在存储过程中嗅探参数。说你有
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 做出任何假设,那么为什么它不会缓存最有可能是全表扫描的计划(因为它没有做出任何假设,它怎么会生成其他任何东西呢? )?
这种技术基本上就像“没有输入会运行良好,但也没有输入会运行得非常糟糕”吗?