除了空间索引之外,InnoDB索引都是B树数据结构。空间索引使用R树,R树是用于索引多维数据的专用数据结构。索引记录存储在其B树或R树数据结构的叶页中。索引页的默认大小为16KB。
当新记录被插入到InnoDB聚集索引中时,InnoDB会尝试保留页面的1/16空间,以便将来插入和更新索引记录。如果按顺序(升序或降序)插入索引记录,则生成的索引页大约为15/16。如果以随机顺序插入记录,则页面从1/2到15/16。
InnoDB在创建或重建B树索引时执行大容量加载。这种索引创建方法称为排序索引构建。innodb_fill_factor configuration选项定义了在排序索引构建期间填充的每个B树页面上的空间百分比,剩余空间保留用于将来索引增长。空间索引不支持排序索引生成。如果innodb_fill_factor设置为100,则聚集索引页中的1/16空间可供将来索引增长使用。
如果InnoDB索引页的填充因子低于MERGE_阈值(如果未指定,默认为50%),InnoDB将尝试收缩索引树以释放该页。MERGE_THRESHOLD设置同时适用于B-tree和R-tree索引。
通过在初始化MySQL实例之前设置InnoDB页面大小配置选项,可以为MySQL实例中的所有InnoDB表空间定义页面大小。一旦定义了实例的页面大小,就不能在不重新初始化实例的情况下对其进行更改。支持的大小为64KB、32KB、16KB(默认)、8KB和4KB。
使用特定InnoDB页面大小的MySQL实例不能使用来自使用不同页面大小的实例的数据文件或日志文件。