介绍
在不是空间索引时,InnoDB使用B-tree作为索引的数据结构。空间索引使用R-tree,R-tree用来索引多维数据。索引记录存储在B-tree或R-tree的叶子节点。索引的页大小默认是16KB。在MySQL初始化之前可以通过innodb_page_size来设置索引页大小。
当一个新记录插入到InnoDB的聚集索引中时,InnoDB尝试预留1/16的空闲页空间来应对未来的索引记录的插入和更新。如果索引插入时顺序的(升序或降序),那么索引页的15/16是满的。如果索引记录是以随机顺序插入的,那么索引页空间大概在1/2到15/16是满的。
当InnoDB新建或重建索引时,InnoDB会执行批量加载以加速索引创建。这种索引的创建方式称为排序索引重建。innodb_fill_factor 变量定义在排序索引构建期间填充的每个 B 树页面上的空间百分比,剩余空间保留用于未来索引增长。排序索引构建不支持空间索引。将innodb_fill_factor设置为100后,聚集索引页中1/16的空间可用于未来索引的增长。
如果 InnoDB 索引页面的填充因子低于 MERGE_THRESHOLD(如果未指定,则默认为 50%),InnoDB 会尝试收缩索引树以释放页面。 MERGE_THRESHOLD 设置适用于 B-tree 和 R-tree 索引。