面试套路问题总结6

1.数据库为什么使用B+树而不是B树

B树和B+树的区别

B树和B+树的区别主要有两点:

  1. 在B树中,你可以将键和值存放在内部节点和叶子节点,但在B+树中,内部节点都是键,没有值。叶子节点同时存放键和值
  2. B+树的叶子节点有一条链相连,而B树的叶子节点各自独立。

使用B+树的好处


1.由于B+树的内部节点只存放键,不存放值,因此,一次读取,可以在内存页中获取更多的键,有利于更快地缩小查找范围。
2.B+树的叶节点由一条链相连,因此,当需要进行一次全数据遍历的时候,B+树只需要使用O(logN)时间找到最小的一个节点,然后通过链进行O(N)的顺序遍历即可。而B树则需要对树的每一层进行遍历,这会需要更多的内存置换次数,因此也就需要花费更多的时间

3.B树只能进行随机检索,B+树可以进行随机检索和顺序检索。(因为B+树的叶子节点之间由一条链相连)

4.B+树查询更稳定,B树的数据离根节点越近,查询越快,B+树的数据永远在叶子节点。

5.B+树可以方便地进行范围查询,只需要遍历叶子节点即可,而B树不行

6.B+树可以提高增加和删除数据的速度(因为B+树的数据以有序的链表结构存储)

使用B树的好处
B树可以在内部节点同时存储键和值,因此,把频繁访问的数据放在靠近根节点的地方将会大大提高热点数据的查询效率。这种特性使得B树在特定数据重复多次查询的场景中更加高效。

数据库为什么使用B+树而不是B树
因为就是上面提到的B+树的好处。数据库的数据读取都是需要进行代价巨大的磁盘IO操作,因此,更快地缩小范围和更少的读取次数是数据库需要关注的重点。而B+树在这些点上比B树做的更好。这就是为什么数据库要选用B+树作为底层实现。
 

猜你喜欢

转载自blog.csdn.net/songkai558919/article/details/122304566