除空间索引(spatial indexes)外,InnoDB索引是B树数据结构。 空间索引使用R树,R树是用于索引多维数据的专用数据结构。 索引记录存储在其B树或R树数据结构的叶页中。 索引页的默认大小为16KB。
当新记录插入到InnoDB聚集索引中时,InnoDB尝试留页面的1/16空闲以供将来插入和更新索引记录。 如果按顺序插入索引记录(升序或降序),则所得到的索引页使用率大约为15/16。 如果随机插入记录,则索引页使用率在1/2到15/16之间。
InnoDB在创建或重建B树索引时执行批量加载。这种索引创建方法称为排序索引构建。配置选项定义了在排序索引构建期间每个B树页面上已填充的空间百分比,剩余空间保留给以后的索引增长。设置为100的innodb_fill_factor(使用率)会使群集索引页面中的空间的1/16空闲,以供将来索引增长。
当索引页的使用率低于MERGE_THRESHOLD(合并阈值,默值50%)innodb将收缩索引树来释放页面。MERGE_THRESHOLD 对B-tree、R-tree 索引都生效。