BTREE索引

BTREE 索引的演变

  1. BTREE 索引上层节点保持下层节点的最小值(根节点、枝节点、叶子节点)

  2. B+TREE 在BTREE 索引的基础上增加了叶子节点的双向指针

  3. B*TREE 在B+TREE 索引的基础上增加了枝节点的双向指针

BTREE 索引在功能上的分类

  1. 辅助索引

  2. 聚集索引

辅助索引的底层建立机制

  1. 管理员选择一个列创建辅助索引

  2. MySQL 自动取出此列的值,并将此列的值进行排序

  3. 将排序好的数据均匀存储到索引的叶子节点,并生成枝节点和根节点(叶子节点中的值都会对应聚集索引值(主键值))

聚集索引的底层建立机制

  1. MySQL 自动选取主键作为聚集索引列,没有主键的会选择唯一键,如果都没有会生成隐藏主键

  2. MySQL 按照聚集索引列的顺序,有序地存储数据行

  3. 聚集索引直接将原表的数据页作为叶子节点,然后提取聚集索引列向上生成枝节点和根节点

聚集索引和辅助索引的区别

  • 表中任何一个列都可以创建辅助索引

  • 一张表中聚集索引只能有一个,一般是主键

  • 辅助索引的叶子节点只存储索引列的值+聚集索引列的值

  • 聚集索引叶子节点存储整行数据

  • MySQL的表数据存储是聚集索引组织表

辅助索引详细分类

  • 单列辅助索引

  • 联合索引(覆盖索引)

  • 唯一索引

索引树高度的问题

索引树高度越低越好,一般3-4层为最佳

数据行较多的问题

数据行较多时,可采取分表、分片、分布式架构

字段长度较长的问题

如果业务允许,尽量选择字段长度较短的列作为索引列;

业务不允许则采取前缀索引的方式

Last updated