10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

15.11.4整理表碎片

对二级索引的随机插入或删除可能导致索引碎片化。碎片意味着磁盘上索引页的物理排序与页上记录的索引排序不接近,或者在分配给索引的64页块中有许多未使用的页。

碎片化的一个症状是表占用的空间比它更多应该接受。具体有多少是很难确定的。所有InnoDB数据和索引存储在b树,他们的填充因数可能从50%到100%不等。碎片化的另一个症状是这样的表扫描比它花费更多的时间应该花:

SELECT COUNT(*) FROM t WHEREnon_indexed_column< > 12345;

前面的查询要求MySQL执行全表扫描,这是对大表最慢的查询类型。

要加速索引扫描,可以定期执行ALTER TABLE操作,将导致MySQL重新构建表:

ALTER TABLEtbl_name引擎= INNODB

你也可以用ALTER TABLEtbl_name执行重构表的Alter操作。

这两个ALTER TABLEtbl_name引擎= INNODB而且ALTER TABLEtbl_name使用在线DDL.有关更多信息,请参见第15.12节“InnoDB和在线DDL”

执行碎片整理操作的另一种方法是使用, mysqldump若要将表转储到文本文件中,请删除表,并从转储文件中重新加载表。

如果对索引的插入总是升序的,记录只从末尾删除,则InnoDB文件空间管理算法保证索引中不会出现碎片。