mysql之索引树结构分类
关于树结构中的节点分类:根节点、内部节点、叶子节点,帮你梳理一下它们的关系和特点,尤其结合数据库索引(比如 B+ 树)讲解。
1. 节点分类定义
| 节点类型 | 定义 | 说明 |
|---|---|---|
| 根节点 | 树的最顶层节点 | 唯一一个,没有父节点 |
| 内部节点 | 非根节点且有子节点的节点 | 介于根节点和叶子节点之间,负责索引导航 |
| 叶子节点 | 没有子节点的节点 | 树的最底层节点,存储具体数据或指向数据 |
2. 关系示意
[根节点]
/ \
[内部节点] [内部节点]
| |
[叶子节点] [叶子节点]
- 根节点是树的入口。
- 内部节点是“中间层”,连接根节点和叶子节点,起导航作用。
- 叶子节点是最终存放数据的位置。
3. 以 B+ 树为例
- 根节点 存储键值和指向子节点的指针,最顶层索引。
- 内部节点 也是存键值和子节点指针,但不存具体数据,只是索引层级的导航节点。
- 叶子节点 存储完整的索引键值以及对应的数据行(聚簇索引)或数据行的主键指针(辅助索引)。
4. 特点和作用
| 节点类型 | 作用 | 存储内容 | 指针指向 |
|---|---|---|---|
| 根节点 | 入口,开始搜索路径 | 键值+指向子节点的指针 | 子节点(内部节点或叶子节点) |
| 内部节点 | 导航,加快查找速度 | 键值+指向子节点的指针 | 子节点(内部节点或叶子节点) |
| 叶子节点 | 存储真正的数据或指向数据的地址 | 索引键值 + 行数据或主键指针 | 可能有链表指针指向相邻叶子节点(B+树) |
5. 说明
- 所有节点(根节点和内部节点)都至少有两个子节点,保证树高度平衡。
- 叶子节点是没有子节点的末端节点,存储数据。
- 在 B+ 树中,叶子节点之间通常通过链表连接,方便范围扫描。
6. 例子:InnoDB 聚簇索引 B+ 树结构
根节点
/ \
内部节点 内部节点
/ \ / \
叶子节点 叶子节点 叶子节点 叶子节点(存储完整行数据)
