日期:2014-05-17  浏览次数:20552 次

Declare传参查询速度较快,直接放入参数执行sql却特别慢,求大牛给原因
1.有一段sql,在使用declare传参时查询时间不到1秒,但如果直接将参数放入sql中查询需要10秒以上。
2.查看执行计划,其中直接传参时,有一个视图中时间的比较开销达到99%。
于是我把时间范围调大,理论上数据应该更多才是,反而查询时间不到1秒。

两个不太正常的现象,求原因
declare传参 时间范围调大

------解决方案--------------------
你可以看看这个:

参数嗅探 Parameter Sniffing 
http://www.cnblogs.com/lyhabc/articles/3222179.html

其实就是,当你用变量来传值的时候,是sql server做出的一种折中的判断,来生成了一个执行计划,这个执行计划一般都不是最优化的。。

而你直接传值,很奇怪,反而生成了比较慢的执行计划,我觉得,你可以尝试更新统计信息:

update statistics 表
------解决方案--------------------
如果你这个是存储过程的话,重编译一下,如果有效果,可能就是参数嗅探