树
- 二叉树
- 平衡二叉树
- B树
- B+树
面临的问题:
-
哈希索引问题
-
回旋查找问题 --> 范围查找
-
树高问题
-
范围查找问题
1-哈希索引问题
- 因为哈希值是一个无序值,所以使用哈希值作为索引无法应对范围查找、顺序查找问题;
- 哈希值可能会发生冲突
2-平衡二叉树
平衡二叉树的结点可以存储多个数据。
- 可以有效的控制左右子树的高度,左右子树的高度差最大为1
- 同样无法进行范围查找
3-B树
B树结构:B 树的所有节点既存放键 (key) 也存放数据 (data),而 B + 树只有叶子节点存放 key 和 data,其他内节点只存放 key。B 树的叶子节点都是独立的;
- 一个节点可以同时存多个值,让树高变矮,减少磁盘IO次数,增加查找速度。
- 同样无法应对范围查找
4-B+树
- 一个结点可以存储多个值,让树高变矮,减少磁盘IO次数,增加查找速度。
- 通过叶子结点的单项链表解决了回旋查找问题与范围查找问题
- 非叶子结点存储key索引,叶子结点存储key与value,同时叶子结点已经是排好序的
- 问题:有些叶子结点可能既是索引又是值,查询它们效率可能会降低