为了账号安全,请及时绑定邮箱和手机立即绑定

请问SQL Server中的参数嗅探(或欺骗)

请问SQL Server中的参数嗅探(或欺骗)

吃鸡游戏 2019-10-22 17:12:47
SQL Server中的参数嗅探(或欺骗)不久前,我有一个查询,我为我的一个用户运行了相当多的查询。它仍然在进化和调整,但最终它的建立和运行速度相当快,所以我们用它创建了一个存储过程。到目前为止还很正常。然而,存储过程是缓慢的。查询和proc之间没有实质区别,但速度变化很大。[背景,我们正在运行SQLServer 2005。]一个友好的本地DBA(不再在这里工作)看了一下存储过程,说:“参数欺骗!”编辑:虽然它似乎也可能被称为“参数嗅探”,但这或许可以解释为什么当我试图搜索它时,谷歌点击率很低。)我们将一些存储过程抽象为第二个存储过程,将对这个新的内部过程的调用封装到先前存在的外部过程中,称为外部过程,并且,嘿,presto,它与原始查询一样快。那么,是什么原因呢?有人能解释参数欺骗吗?奖金信贷突出强调如何避免建议如何识别可能的原因讨论其他策略,例如统计数据、索引、键,以缓解这种情况。
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超12个赞

加快速度的一个简单方法是在sproc开始时将输入参数重新分配到本地参数。

CREATE PROCEDURE uspParameterSniffingAvoidance    @SniffedFormalParameter intASBEGIN

    DECLARE @SniffAvoidingLocalParameter int    SET @SniffAvoidingLocalParameter = @SniffedFormalParameter   
     --Work w/ @SniffAvoidingLocalParameter in sproc body 
    -- ...



查看完整回答
反对 回复 2019-10-23
  • 3 回答
  • 0 关注
  • 465 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信