14.6.2.2 InnoDB 索引的物理结构

除空间索引外,InnoDB索引是B-tree数据结构。空间索引使用R-trees,这是用于索引多维数据的专用数据结构。索引记录存储在其 B 树或 R 树数据结构的叶页中。索引页的默认大小为 16KB。

当将新记录插入InnoDB clustered index时,InnoDB会尝试使页面的 1/16 空闲,以供将来插入和更新索引记录。如果按 Sequences 插入索引记录(升序或降序),则所得到的索引页约为 15/16 装满。如果以随机 Sequences 插入记录,则页面的容量为 1/2 到 15/16.

InnoDB在创建或重建 B 树索引时执行批量加载。这种索引创建方法称为排序索引构建。 innodb_fill_factor配置选项定义了在排序索引构建期间每个 B 树页面上已填充的空间百分比,剩余的空间保留用于将来的索引增长。空间索引不支持排序索引构建。有关更多信息,请参见第 14.6.2.3 节“排序的索引构建”innodb_fill_factor设置为 100 会使聚 Cluster 索引页面中的空间的 1/16 留给将来的索引增长。

如果InnoDB索引页的填充因子下降到MERGE_THRESHOLD以下(如果未指定,默认值为 50%),则InnoDB尝试收缩索引树以释放页面。 MERGE_THRESHOLD设置适用于 B 树和 R 树索引。有关更多信息,请参见第 14.8.12 节“为索引页面配置合并阈值”

您可以通过在初始化 MySQL 实例之前设置innodb_page_size配置选项来为 MySQL 实例中的所有InnoDBtable 空间定义page size。一旦定义了实例的页面大小,就不能在不重新初始化实例的情况下对其进行更改。支持的大小为 64KB,32KB,16KB(默认),8KB 和 4KB。

MySQL 5.7 中增加了对 32KB 和 64KB 页面大小的支持。有关更多信息,请参阅innodb_page_size文档。

使用特定InnoDB页面大小的 MySQL 实例不能使用来自使用不同页面大小的实例的数据文件或日志文件。