猿问

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

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

不久前,我有一个查询,我为我的一个用户运行了相当多的查询。它仍然在进化和调整,但最终它的建立和运行速度相当快,所以我们用它创建了一个存储过程。

到目前为止还很正常。

然而,存储过程是缓慢的。查询和proc之间没有实质区别,但速度变化很大。

[背景,我们正在运行SQLServer 2005。]

一个友好的本地DBA(不再在这里工作)看了一下存储过程,说:“参数欺骗!”编辑:虽然它似乎也可能被称为“参数嗅探”,但这或许可以解释为什么当我试图搜索它时,谷歌点击率很低。)

我们将一些存储过程抽象为第二个存储过程,将对这个新的内部过程的调用封装到先前存在的外部过程中,称为外部过程,并且,嘿,presto,它与原始查询一样快。

那么,是什么原因呢?有人能解释参数欺骗吗?

奖金信贷

  • 突出强调如何避免
  • 建议如何识别可能的原因
  • 讨论其他策略,例如统计数据、索引、键,以缓解这种情况。


吃鸡游戏
浏览 492回答 3
3回答

开心每一天1111

加快速度的一个简单方法是在sproc开始时将输入参数重新分配到本地参数。CREATE PROCEDURE uspParameterSniffingAvoidance    @SniffedFormalParameter intASBEGIN     DECLARE @SniffAvoidingLocalParameter int    SET @SniffAvoidingLocalParameter = @SniffedFormalParameter         --Work w/ @SniffAvoidingLocalParameter in sproc body      -- ...
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答