一、MySQL 索引
- 索引 是帮助 MySQL 高效获取数据,的 排好序 的 数据结构。
1. 索引数据结构
1.1 二叉树
1.2 红黑树
1.3 Hash 表
- 等值查询性能优,不适合范围查询。
1.4 B-Tree
- 叶节点具有相同的深度,叶节点的指针为空。
- 所有索引元素不重复。
- 节点中的数据索引,从左到右递增排列。
1.5 B+Tree
- 非叶子节点不存储 Data,只存储索引(冗余),可以放更多的索引。
- 叶子节点包含所有索引字段。
- 叶子节点用指针(双向指针)连接,提高区间访问的性能。
- 16k / (索引8b(BIGINT) + 指针6b) = 1170
SHOW GLOBAL STATUS like 'Innodb_page_size';
2. 索引文件
2.1 MyISAM 索引文件 和 数据文件 是分离的(非聚集)
2.2 InnoDB
索引实现(聚集)
- 表数据文件本身就是按
B+Tree
组织的一个索引结构文件。- 聚集索引,叶节点 包含了完整的数据记录。
- 为什么
InnoDB
表必须有主键,并且推荐使用整型的自增主键?- 为什么 非主键索引 结构 叶子节点 存储的是主键值?(一致性 和 节省存储空间)。