我目前正在尝试解决一个问题,即为我的一个存储过程不确定地缓存了一个错误的查询计划。许多资源表明此类问题可能是由参数嗅探引起的,但我不确定我的情况是否适用。
具体来说,我有一个 XML 类型的参数,我在存储过程中做的第一件事就是将它加载到临时表中。这会受到参数嗅探的影响吗?
(复制是耗时的,就像我说的那样,是不确定的,这就是为什么我还没有检查的原因)
我目前正在尝试解决一个问题,即为我的一个存储过程不确定地缓存了一个错误的查询计划。许多资源表明此类问题可能是由参数嗅探引起的,但我不确定我的情况是否适用。
具体来说,我有一个 XML 类型的参数,我在存储过程中做的第一件事就是将它加载到临时表中。这会受到参数嗅探的影响吗?
(复制是耗时的,就像我说的那样,是不确定的,这就是为什么我还没有检查的原因)
我不知道您的意思plan is non-determinstically cached
是执行计划可以兑现或不兑现。参数嗅探是服务器根据参数值找出最有效的执行计划,在某些情况下使用。粗略地说,通过参数嗅探,sql-server 决定使用某些索引是否有效。您可以阅读有关它的更多信息,例如在此博客中。
因此,回答您的问题,因为您在某些情况下不使用 xml 参数,而只是将其加载到临时表中,因此执行计划不会受到参数嗅探的影响。
但是,只要您使用临时表,执行计划在大多数情况下都不会兑现,并且会在每次执行时重新编译。如果您希望兑现计划,请考虑使用表变量。
希望这可以帮助。
这是一个愚蠢的问题:表格统计数据的样本量太小(相当大的表格)。我们显着增加了样本量,一切都再次顺利进行。