通常我们存储一些数据的时候,直观的会想到用数组或者链表。但是对于大量数据的读取和更新数组和链表都不合适。数组在读取时很快,但是插入要移动大量数据,链表在插入时很快,但是查找效率不高,只能遍历。
这个时候选择平衡树就是很好的方案,树的查找效率是logN,插入需要移动的节点也只限于子节点这一块。树也分为很多种,我们知道B树其实是一个N叉平衡树。
-
首先为什么要选择N叉平衡树(B树 vs BST),个人认为有两个原因:
- N叉:树的查找效率是logN,那么层数越少查找的效率越高,当然层数也不能无限的小,小到最后变成一个链表的遍历了(磁盘上的页数:16K/字段的大小=M)
- 平衡:平衡树的特性是 左右子树深度差绝对值不能超过 1 一方面是为了控制层数,另一方面也是为了维护树的稳定
-
为什么选择B+树?
-
B+树与B树的区别:
- B+树所有的数据都存储在叶子节点上,非叶子节点只存放索引的值,而B树是节点直接存放数据,B+树所有的搜索都会走到叶子节点,而B树查找到匹配的数据直接返回了。
- B+树所有的数据都可以在叶子节点上找到。
- B+树的叶子节点之间也有一个指针串联。
-
B+树的优点:因为B+树是根据B树改造的,所以B树的优点,B+树都是有的,并且相较于B树,B+树还有以下的优点:
- 适合扫表或范围查询
- 单节点可以存储更多的关键字,查询效率更高
- 稳定,每次都会走到叶子节点
-