有一个对数据库疑惑的问题,场景如下

172 天前
 deng884720982

有一个项目,大概跑了两年数据量比较大,偶尔会出现系统效率响应变慢的情况。 由于现场不能停工,第一反应是不是历史数据太大了,使用存储过程,分批把历史数据删除剩下几百万。 发现两个模块都慢,最终分析代码发现两个模块都调用了一个方法。方法执行的 sql 如下:

怀疑可能是 UNION 走了全表导致的,然后加了如下索引

 CREATE INDEX IX_STATUS_WCSSOURCE ON TTT(STATUS, WCSSOURCE);

系统就正常了。

但是没搞懂的是,为什么清除历史数据了还是慢,而且期间运行了几年也没有卡顿。 备注:使用的是删除,主键此时还是比较大的数值

2680 次点击
所在节点    数据库
24 条回复
fengpan567
171 天前
因为 MIN(WCSSOURCE)子查询,可不得全表扫描吗
ilucio
171 天前
应该是 MIN(WCSSOURCE)导致的,只对 WCSSOURCE 字段加索引效果应该是一样的
Plutooo
171 天前
在新建索引之前有没有存在其他索引 比如索引 a ,之前正常运行有可能是能命中索引 a 所以没问题,数据多以后优化器选错索引或者未命中索引,具体还是要通过执行计划分析
deng884720982
171 天前
感谢大家的回复,从事相关行业并不是很久。学习到了,sql 问题先使用 explain 去分析,看是否走的全表扫描。以及楼上老哥说的,存储空间碎片化的问题。十分感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1098352

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX