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
--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
相关文章推荐
- SQL关于加参数查询很慢的问题
- 关于sql查询语句 的一个问题
- 关于数据库查询语句SqlDataReader的连接释放问题的解决办法
- pl/sql developer遇到关于查询显示的问题
- 关于用Hibernate执行sql查询,字符字段类型只返回第一个字节的问题
- Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- asp.net SqlParameter关于Like的传参数无效问题
- 关于SQL查询语句TOP 后面跟参数的解决方法
- Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- 关于sql连接查询问题
- 关于SQL中Between语句查询日期的问题
- 关于 SQL中CONVERT函数的第三个参数的问题
- 关于SQL组合查询问题的一个思考
- 关于sql的查询问题
- [转]关于SQL中Between语句查询日期的问题
- 关于linq to sql调用存储过程,出现"无法枚举查询结果多次"的问题
- 关于SQL查询的字符串类型字段的排序问题
- 很奇怪的一个问题,是关于sql参数化和传where in 参数的迷惑.请大伙给讲讲吧...小弟很迷糊现在.各位园友,拉兄弟一把!!
- 关于SqlParameter中IN子句查询的问题
- Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)