有一个项目,大概跑了两年数据量比较大,偶尔会出现系统效率响应变慢的情况。 由于现场不能停工,第一反应是不是历史数据太大了,使用存储过程,分批把历史数据删除剩下几百万。 发现两个模块都慢,最终分析代码发现两个模块都调用了一个方法。方法执行的 sql 如下:
怀疑可能是 UNION 走了全表导致的,然后加了如下索引
CREATE INDEX IX_STATUS_WCSSOURCE ON TTT(STATUS, WCSSOURCE);
系统就正常了。
但是没搞懂的是,为什么清除历史数据了还是慢,而且期间运行了几年也没有卡顿。 备注:使用的是删除,主键此时还是比较大的数值
1
bg7lgb 3 小时 38 分钟前
最简单的处理方法 ,explain plan ,看下 SQL 的执行计划。
这个组合索引并不优,不如分开建索引。 |
2
spiffing 3 小时 29 分钟前
换成临时表都比 union 快
|
3
fffq 3 小时 25 分钟前
表要做碎片整理吧
|
4
irisdev 2 小时 55 分钟前
这个表名起的
|