系统里的查询奇慢无比,但是sqlserver中只要6s,在软件中要40几秒。
最近客户反应,有个报表查询报“查询失败”,然后亲测以后发现真的是“查询失败”,一看数据也就几K条,这个哪有可能呢。
1、检查过程写得是否有问题。
在sqlserver中进行了查询,发现只要6s。基本排除。
2、到了软件里一查询,至少也得40s多,这个不是一个量级的,一个是稍等马上就好,一个是等了又等,然后报错。
那就是开发IDE的问题,按理讲,也不至于会这样,参数类型也都测试过了,发现也没有什么用。
解决:
1、将软件中的超时时间设大一些,这样就可以在40s多还不至于报错了。
2、with recompile
很可能是参数嗅探造成。
改一下存储过程:
Alter proc proc_xxx
with recompile
As
......
只要在存储过程中加上 with recompile,这样就解决了。
SQL SERVER 在每次查询之后,会生成相应的查询计划,这个查询计划是生成的几个查询计划中最优的一种,但如果查询的参数不同,可能该查询计划不是最优的,
但是数据库多数情况下依然使用当前的查询计划,就这使查询的效率变低,with recompile 使SQL SERVER 不使用缓存的查询计划,强迫使之得新生成查询计划,
在生成查询计划不消耗太多资源的条件下,with recompile 是一个不错的选择。
道法自然