各位好:
数据查询日期6个月,30秒出结果,CPU也是2%以内
加多一个月 7个月,执行时间就变成10几分钟,查看服务器30秒以后变100%,持续10 分钟
为什么呢?
当然我也知道跟踪程序,查出效率慢的地方,加索引等,
但6个月变7个月,速度大降,一定还有索引以外的原因
是什么呢? 什么地方有临界值?怎么改善?
------解决思路----------------------
别的不用看了,看到
select ...
union
select ...
union
select ...
去重复的时间复杂度就是指数级别的,所以没什么好奇怪的。
------解决思路----------------------
既然最终结果要用 like 过滤,为什么不在生成中间表时直接先过滤掉?(把蓝色条件的 d 也先过滤成临时表。)
这样参与联合的记录要少很多吧。
既然你认为是红色部分耗时,那么把各个联合部分的记录数 PRINT 出来,看看 6 个月和 7 个月有什么差别。
------解决思路----------------------
4表联接,1个表多1万数据联接结果可以多出很多来。
用来过滤的这个中间结果可能超出物理内存、要用到磁盘缓存了。