MySQL 8.0版本说明
MySQL 8.0源代码文档10bet官方网站
对二级索引的随机插入或删除可能导致索引碎片化。碎片意味着磁盘上索引页的物理排序与页上记录的索引排序不接近,或者在分配给索引的64页块中有许多未使用的页。
碎片化的一个症状是表占用的空间比它更多”应该”接受。具体有多少是很难确定的。所有InnoDB
数据和索引存储在b树,他们的填充因数可能从50%到100%不等。碎片化的另一个症状是这样的表扫描比它花费更多的时间”应该”花:
SELECT COUNT(*) FROM t WHEREnon_indexed_column< > 12345;
前面的查询要求MySQL执行全表扫描,这是对大表最慢的查询类型。
要加速索引扫描,可以定期执行”零”ALTER TABLE
操作,将导致MySQL重新构建表:
ALTER TABLEtbl_name引擎= INNODB
你也可以用ALTER TABLE
执行”零”重构表的Alter操作。tbl_name
力
这两个ALTER TABLE
而且tbl_name
引擎= INNODBALTER TABLE
使用在线DDL.有关更多信息,请参见第15.12节“InnoDB和在线DDL”.tbl_name
力
执行碎片整理操作的另一种方法是使用, mysqldump若要将表转储到文本文件中,请删除表,并从转储文件中重新加载表。
如果对索引的插入总是升序的,记录只从末尾删除,则InnoDB
文件空间管理算法保证索引中不会出现碎片。