闲扯B-Tree和B+Tree的异同
来源:互联网 发布:品类管理数据分析 编辑:程序博客网 时间:2024/06/07 00:03
#同#
B树和B+树其实都是平衡搜索树。这里要脑补一下平衡搜索树的概念:这个词划分一下就是平衡+搜索+树。也就是说,他首先是一棵树,其次能搜索,再次他是平衡的。大家耳熟能详的一个概念:二叉平衡搜索树。(详细的大家可以在百度上搜一下定义,或者拿起那本厚实的「算法导论」看看)。
#异#
但是B树和B+树却有不同的地方。就是这些不同的地方,决定了他们的用处可能不一样。
我画了一个不太漂亮的B树的图。我们可以看到B树里面,每个结点有这样的特点:不论是叶结点还是非叶结点,都含有Key和一个指向数据的指针。这样,一旦找到某个结点以后,就可以根据指针找到对应的磁盘地址。
但是,这也带来了另外的问题,就是每一个数据的指针会带来额外的内存占用,从而减少放入内存的结点数。
我们再回头看看B+树,他有两个明显的特征:
1、所有的叶子结点才有指向数据的指针。非叶结点就是纯的索引数据。这样的好处在于,我们可以将尽可能的非叶结点载入内存,没有浪费。
2、大家注意看那个红色的箭头,每个叶结点都有指向下一个叶结点的链接。这样的好处在于,我们可以从任意一个叶结点开始遍历,获取接下来所有的数据。
所以,综合来看,B+Tree比B-Tree少了点儿东西,又多了点儿东西。这样就使得很多数据库在选择索引数据结构的时候,选择了B+Tree(也不是所有的)。
比如,我们写一条Sql:select * from alphabets order by key_word;
大家想想,如果用B树和B+树,怎么样来实现这样的功能?B树好像比较为难。B+树则可以直接用叶结点的索引链遍历。
这样看起来,B+树似乎比B树强很多。但是,任何算法和数据结构都有适用他的地方。如果没有order by这样类似的需求,而B树实现的成本比B+树要低,那么采用B树也是一种不错的选择。所谓的没有最好,只有更适合。选择适合的最重要~
- 闲扯B-Tree和B+Tree的异同
- B tree、B-tree和B+tree
- B-Tree和B+Tree
- B-tree 和B+tree
- B-tree,B+tree和LSM-tree
- MySQL索引使用的数据结构:B-Tree和B+Tree
- MySQL索引使用的数据结构:B-Tree和B+Tree
- MySQL索引使用的数据结构:B-Tree和B+Tree
- B-tree、B+tree
- B-Tree/B+Tree
- B-tree B+tree
- B-tree&B+tree
- B-tree和B+tree浅析
- BTree,B-Tree,B+Tree,B*Tree的数据结构
- B树和B树的实现 B-Tree
- B-tree/B+tree/B*tree
- BTree,B-Tree,B+Tree,B*Tree
- BTree,B-Tree,B+Tree,B*Tree
- 分四个进程拷贝一个大文件
- 必选边最小联络代价
- gcd & lcm
- NetworkX Study
- 二叉树 已知两个序列,建
- 闲扯B-Tree和B+Tree的异同
- Hadoop集群搭建及测试过程中碰到的问题汇总
- 带有和夏天很配的逐浪字体+美食设计
- 深入理解Java的接口和抽象类
- Java疯狂讲义读书笔记第八章
- HDU
- The best way of parsing xml
- 非常详细的weblogic使用教程以及集群配置
- 将后台中获取的值传到select,并将左边select的值移到右边,将select的全部值传到后台