SQL Server中的参数嗅探(或欺骗)不久前,我有一个查询,我为我的一个用户运行了相当多的查询。它仍然在进化和调整,但最终它的建立和运行速度相当快,所以我们用它创建了一个存储过程。到目前为止还很正常。然而,存储过程是缓慢的。查询和proc之间没有实质区别,但速度变化很大。[背景,我们正在运行SQLServer 2005。]一个友好的本地DBA(不再在这里工作)看了一下存储过程,说:“参数欺骗!”编辑:虽然它似乎也可能被称为“参数嗅探”,但这或许可以解释为什么当我试图搜索它时,谷歌点击率很低。)我们将一些存储过程抽象为第二个存储过程,将对这个新的内部过程的调用封装到先前存在的外部过程中,称为外部过程,并且,嘿,presto,它与原始查询一样快。那么,是什么原因呢?有人能解释参数欺骗吗?奖金信贷突出强调如何避免建议如何识别可能的原因讨论其他策略,例如统计数据、索引、键,以缓解这种情况。
3 回答
开心每一天1111
TA贡献1836条经验 获得超13个赞
CREATE PROCEDURE uspParameterSniffingAvoidance @SniffedFormalParameter intASBEGIN DECLARE @SniffAvoidingLocalParameter int SET @SniffAvoidingLocalParameter = @SniffedFormalParameter --Work w/ @SniffAvoidingLocalParameter in sproc body -- ...
- 3 回答
- 0 关注
- 491 浏览
添加回答
举报
0/150
提交
取消