不久之前,我有一个查询,我为我的一个用户运行了很多.它仍然在进化和调整,但最终它稳定并且运行得非常快,所以我们从中创建了一个存储过程.
到目前为止,这是正常的.
但是,存储过程很慢.查询和proc之间没有实质性差异,但速度变化很大.
[后台,我们正在运行SQL Server 2005.]
友好的本地DBA(不再在这里工作)看了一下存储过程并说"参数欺骗!" (编辑:虽然它似乎也可能被称为'参数嗅探',这可能解释了当我试图搜索它时谷歌的点击率很低.)
我们将一些存储过程抽象到第二个存储过程,将对这个新内部过程的调用包装到预先存在的外部过程中,称为外层过程,嘿,它与原始查询一样快.
那么,是什么给出的?有人可以解释参数欺骗吗?
奖金积分
我有一个通过SSMS在5秒内执行的SP
当通过LINQ-to-SQL excel加载项执行相同的SP时,它会在30秒后超时(对同一SP的简单查询需要很长时间但返回结果)
然后我更改了SP,以便将所有输入参数重新分配给SP内的新本地参数.这使得SP在SSMS中运行时间为36秒(所以SSMS开始这么快的原因就是这样)
所以我猜测SQL服务器没有使用参数嗅探来进行LINQ-to-SQL查询?
所以,我的问题是,是否有任何方法可以使SP在LINQ-to-SQL中与在SSMS中一样快(使用它的参数嗅探)