关于B树和B+树的一些话题

版权声明:博主保留一切权利,转载请注明出处。 https://blog.csdn.net/li_canhui/article/details/85795862

关于B树的介绍,可以参考这篇文章https://blog.csdn.net/li_canhui/article/details/85269921

1,那么B+树和B树的区别是什么呢?

B+数是从B树改进来的,它和B树的主要区别在于,B+树中保存元素的节点都位于叶子节点,非叶子节点只起到索引的作用。而且,B+树不同子树直接有指针连接起来了。

2,数据库的索引一般采用B+树来实现,可以达到的时间复杂度为log(n)。更进一步讨论这个问题,如果我们用hash表来保存索引,那么时间复杂度可以达到O(1)。既然用哈希表保存索引比B+树效率更高,那为什么不用哈希表来实现数据库的索引呢?这主要是考虑数据量的问题。数据库的索引是保存在磁盘上的,如果数据量太大,那么就没有办法一次都载入内存。

3,关于B树,B树是一个多路排序树,为什么要设计成多路的呢?是为了进一步降低树的高度,提高查找效率。在极端情况下,把多路定位无限多,那么B树会变成一个有序数组。

B树一般用在文件系统索引上。文件系统索引为什么喜欢用B树,而不用红黑树或有序数组呢?这是因为,文件系统的索引都是保存在磁盘上的,如果数据量特别大的话,不一定能够一次都载入到内存中。我们可以每次只加载B树的一个节点进行查找。

4,为什么B+树的叶子节点要用指针连接起来?
这个是和业务场景有关的。B+树常用来保存数据库索引,数据库select数据,不一定只选一条,很多时候会选多条。如果选多条的话,B树需要进行局部的中序遍历,才能获取到所有符合条件的元素,而且很可能要跨层访问。而B+树因为所有元素都在叶子节点上,且不同子树的叶子节点已经用指针连接起来了,当需要选择多条数据时,B+树就会有很大的优势。

猜你喜欢

转载自blog.csdn.net/li_canhui/article/details/85795862