mysql如何检查和重建索引_mysql索引碎片优化-mysql教程

MySQL不直接提供索引碎片率,但可通过SHOW TABLE STATUS查Data_free估算;若free_mb超size_mb的20%~30%且存在大量DELETE/UPDATE,则建议OPTIMIZE TABLE或ALTER TABLE … REBUILD优化。

怎么查 MySQL 表的索引碎片率

MySQL 本身不直接暴露“碎片率”数值,但可以通过 INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS 和 INFORMATION_SCHEMA.INNODB_SYS_INDEXES 配合估算。更实用的是查 DATA_FREE 和页利用率:

  • 对 InnoDB 表,执行 SHOW TABLE STATUS LIKE 'your_table_name',关注 Data_free 字段(单位字节)——它表示已分配但未使用的空间,值越大越可能有碎片
  • 用 SELECT table_name, round(((data_length + index_length) / 1024 / 1024), 2) AS size_mb, round((data_free / 1024 / 1024), 2) AS free_mb FROM information_schema.tables WHERE table_schema = 'your_db' AND table_name = 'your_table';
  • 若 free_mb 超过 size_mb 的 20%~30%,且表长期有大量 DELETE/UPDATE,就值得优化

OPTIMIZE TABLE 能不能重建索引

对 InnoDB 表,OPTIMIZE TABLE 实际上等价于 ALTER TABLE ... FORCE(MySQL 5.6+),会重建整个表并重新组织聚簇索引和二级索引,同时更新统计信息。

  • 它会锁表(在可重复读隔离级别下是 ALGORITHM=COPY,全表拷贝;8.0+ 支持 INPLACE,但仍需排他 MDL 锁)
  • 不适用于只读从库或高负载主库,容易触发超时或阻塞写入
  • 执行后 Data_free 通常归零或显著下降,但不会改变索引结构逻辑(比如不会合并单列索引为联合索引)

ALTER TABLE … REBUILD 和 ANALYZE TABLE 的区别

ALTER TABLE t REBUILD(MySQL 8.0.23+)仅重组织物理存储,不重建索引定义;而 ANALYZE TABLE 只更新索引统计信息(用于优化器选执行计划),完全不碰数据页。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » mysql如何检查和重建索引_mysql索引碎片优化-mysql教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4029770+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4029770+
  • 本周更新: 0+
  • 最后更新: 2026-03-16