1.有一段sql,在使用declare传参时查询时间不到1秒,但如果直接将参数放入sql中查询需要10秒以上。
2.查看执行计划,其中直接传参时,有一个视图中时间的比较开销达到99%。
于是我把时间范围调大,理论上数据应该更多才是,反而查询时间不到1秒。
两个不太正常的现象,求原因
declare传参 时间范围调大
------解决方案--------------------
你可以看看这个:
参数嗅探 Parameter Sniffing
http://www.cnblogs.com/lyhabc/articles/3222179.html
其实就是,当你用变量来传值的时候,是sql server做出的一种折中的判断,来生成了一个执行计划,这个执行计划一般都不是最优化的。。
而你直接传值,很奇怪,反而生成了比较慢的执行计划,我觉得,你可以尝试更新统计信息:
update statistics 表
------解决方案--------------------
如果你这个是存储过程的话,重编译一下,如果有效果,可能就是参数嗅探