您的位置:首页 > 数据库

SQL关于加参数查询很慢的问题

2017-03-19 00:00 246 查看
摘要: 在存储过程中设置变量,结果查询很慢
 --WHERE  LocationTime between '2016-11-01 00:02:00' and  '2016-11-01 1:03:00'
--
--    WHERE  LocationTime between @t1 and   @t2

找到一个原因说明,原文链接

http://blog.csdn.net/chrisplus/article/details/53392639

加参数查询很慢的问题,不加的话查询就很快。
有时候是参数嗅探引起的。
如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

select id from t where num = @num
解决方案1

可以改为强制查询使用索引
例如:

select id from t with(index(索引名)) where num = @num
解决方案2

option(RECOMPILE) 重新编译
例如:

select * from T_order where ordertime>@date option(RECOMPILE)

解决方案3
在存储过程定义变量后,as begin前加WITH RECOMPILE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息