我曾经看到有人建议将参数复制到本地变量以避免参数在存储过程中嗅探。假设你有在SQL Server 2005中解决参数嗅探
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没有任何假设是真的,那为什么它不会缓存最有可能成为全表扫描的计划(因为它不做任何假设,它怎么会产生其他东西)?
这种技术基本上就像一个“没有投入将运行良好,但没有投入将运行非常可怕”?
不幸的是肯在2008年去世了。 – 2011-05-24 17:24:15
仅供参考这是“参数掩蔽” – gbn 2011-05-24 19:16:28
rellly ... 我不知道 :( – 2011-05-24 23:31:35