当前位置: 代码迷 >> Sql Server >> sqlserver 查询数据量抵达临界值 cpu 100%
  详细解决方案

sqlserver 查询数据量抵达临界值 cpu 100%

热度:512   发布时间:2016-04-24 09:44:44.0
sqlserver 查询数据量到达临界值 cpu 100%
各位好:

数据查询日期6个月,30秒出结果,CPU也是2%以内

加多一个月 7个月,执行时间就变成10几分钟,查看服务器30秒以后变100%,持续10 分钟

为什么呢?  

当然我也知道跟踪程序,查出效率慢的地方,加索引等,

但6个月变7个月,速度大降,一定还有索引以外的原因

是什么呢? 什么地方有临界值?怎么改善?
------解决思路----------------------
别的不用看了,看到
select ...
union
select ...
union
select ...

去重复的时间复杂度就是指数级别的,所以没什么好奇怪的。
------解决思路----------------------
既然最终结果要用 like 过滤,为什么不在生成中间表时直接先过滤掉?(把蓝色条件的 d 也先过滤成临时表。)
这样参与联合的记录要少很多吧。

既然你认为是红色部分耗时,那么把各个联合部分的记录数 PRINT 出来,看看 6 个月和 7 个月有什么差别。
------解决思路----------------------
4表联接,1个表多1万数据联接结果可以多出很多来。
用来过滤的这个中间结果可能超出物理内存、要用到磁盘缓存了。
  相关解决方案