首页 > 解决方案 > 在 MYSQL 表上删除和重新创建索引,它会提高性能吗?

问题描述

我已经在新导入的 MySQL 数据库中执行了查询,但需要 68 秒才能完成。然后我在 2 个主表上删除并重新创建了相同的索引,然后只需要 24 秒。

为什么会发生?这是一个好习惯吗?

提前致谢

标签: mysql

解决方案


你误解了结果和原因。删除和重新创建索引并不是让它运行得更快的原因。有两件事可能会发生:

1) DB 不适合 RAM,因此当您重新创建两个索引时,它们中的大多数在您运行查询时都粘在缓冲池中。

2) 表是零散的或有非常轻微填充的块。重新创建索引可能会重建表,这可能会提高页面占用率 如果您的查询需要全表扫描,这将意味着要扫描的表更少 GB,并且碎片可能更少(可能对旋转生锈很重要)。

作为一般规则,您永远不需要这样做。如果你禁用查询缓存(query_cache_type=0, query_cache_size=0 on MySQL < 8),并运行两次查询,第二次是你可以预期的命中缓冲池的速度。


推荐阅读