mysql - 在 MYSQL 表上删除和重新创建索引,它会提高性能吗?
问题描述
我已经在新导入的 MySQL 数据库中执行了查询,但需要 68 秒才能完成。然后我在 2 个主表上删除并重新创建了相同的索引,然后只需要 24 秒。
为什么会发生?这是一个好习惯吗?
提前致谢
解决方案
你误解了结果和原因。删除和重新创建索引并不是让它运行得更快的原因。有两件事可能会发生:
1) DB 不适合 RAM,因此当您重新创建两个索引时,它们中的大多数在您运行查询时都粘在缓冲池中。
2) 表是零散的或有非常轻微填充的块。重新创建索引可能会重建表,这可能会提高页面占用率 如果您的查询需要全表扫描,这将意味着要扫描的表更少 GB,并且碎片可能更少(可能对旋转生锈很重要)。
作为一般规则,您永远不需要这样做。如果你禁用查询缓存(query_cache_type=0, query_cache_size=0 on MySQL < 8),并运行两次查询,第二次是你可以预期的命中缓冲池的速度。
推荐阅读
- google-cloud-platform - Google Cloud Vision- 方法:files.annotate - 响应对象更改
- angular - *ngIf 面板内的复选框不会以角度触发
- angular - Angular 8/9 中没有为组件指定模板
- postgresql - 设置 LIMIT 时 Postgres SLOWER:除了添加虚拟“ORDER BY”外,如何修复?
- python - 检查 Makefile 中现有的 conda 环境
- xcode - SwiftUI 和版本控制:不兼容?
- java - 如何在种子堆栈中指定默认汇编程序?
- javascript - 如何获取克隆存储库的所有依赖项
- visual-studio - 无法在 Xamarin.Forms 中添加 ContentPage
- html - 删除选项卡窗格和内容之间的空白