系统里的查询奇慢无比,但是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 是一个不错的选择。

 

参考:https://bbs.csdn.net/topics/392774866

https://www.cnblogs.com/WizardWu/p/4065874.html

posted @ 2024-04-19 16:41  jiduoduo  阅读(4)  评论(0编辑  收藏  举报