二叉树的劣势
当结点数量过多时(海量,如1亿),二叉树会出现如下问题:
- 构建二叉树,需要进行多次IO操作。
- 结点数量较多会导致多次I/O来获取结点。
- 二叉树的高度会很大,降低操作速度。
多叉树
- 构建二叉树,需要进行多次IO操作。
通过重新组织结点,以降低树的高度。
- 多叉树允许一个结点有多个子结点,比如2-3树,2-3-4树。
一、B树
1. 基本概念
是一种多路平衡查找树。对于m阶B树。
- 每个节点最多**m-1个关键字,最多m个子结点**。
- 根节点最少可以只有1个**关键字。根节点的关键字**数量范围:
1 <= k <= m-1
- 非根节点至少有m/2个关键字。非根节点的关键字数量范围:
m/2 <= k <= m-1
。 - 每个节点中的关键字都按照从小到大**的顺序排列**。
- 叶子节点都位于同一层(根到所有叶子的高度相同)。
B树_索引、数据、指针的关系
2. 插入
1) 规则
- 判断当前结点key的个数是否小于等于m-1。
- 如果满足,直接插入。
- 如果不满足,将节点的中间的key将这个节点分为左右两部分,中间的节点放到父节点中即可。
2) 模拟(5阶B树)
3. 删除
二、B+树
1. 概述
在B树基础上做了优化。
- 每个结点可以包含更多的元素结点。
- 为了降低树的高度。
- 将数据变为更多区间,区间越多,数据检索越快。
- 非叶子结点仅存储key值,叶子结点存储key值和数据。
- 叶子结点通过指针互相连接。
2. InnoDB引擎的的B+树索引
- 聚簇索引:索引和数据存放于同一个文件
3. MyISAM引擎的B+树索引
- 非聚簇索引:索引和数据分开存放,索引存在于myi文件,数据存在于myd文件
4. B+树插入元素
- 插入元素全部在叶子结点进行,不能破环关键字自小而大的顺序。
- 插入过程超过树的阶数需要分裂。