[数据结构] 浅谈什么是B+树及B+树的应用、B*树

B+树

定义

  • B+树,又称多路平衡搜索树,B树的变形,是在B树基础上优化的多路平衡搜索树
    B+树

性质

  1. 分支节点的子树指针与关键字个数相同
  2. 分支节点的子树指针a[i]指向关键字值大小在[k[i],k[i+1])区间之间
    每个结点的结构为(n,K1,A1,K2,A2,… ,Kn,An),相当于取消了最左孩子
  3. 所有叶子节点增加一个链接指针链在一起
  4. 所有关键字及其映射数据都在叶子节点出现:分支结点跟叶子结点有重复的值,分支结点存的是叶子结点的索引,即,父亲中存的是孩子结点中的最小值做为索引
  5. 分支结点可以只存key,叶子结点中存key/value。

插入操作

  • B+树的插入过程与B树基本类似,区别在于:第一次要插入两层结点,一层做根,一层做分支;
  • 后面一样是去找待插入位置,然后往叶子结点插入,若满了,就分裂一半给兄弟;然后转换成往父亲中插入一个key和child(孩子就是兄弟,key就是兄弟结点中第一个最小值的key)

B+树的应用

1. MyISAM引擎

  • MyISAM引擎是MySQL5.5.8版本之前默认的存储引擎,不支持事务,支持全文检索,使用B+Tree作为索引结构,叶节点的key域存放的是主键,data域存放的是这一行数据的磁盘地址,即,MyISAM的索引文件仅仅保存数据记录的地址;主索引和辅助索引在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。
    MyISAM引擎

2. InnoDB存储引擎

  • InnoDB存储引擎支持事务,从MySQL数据库5.5.8版本开始成为默认的存储引擎;InnoDB支持B+Tree索引、全文索引、哈希索引;
  • InnoDB使用B+Tree作为索引结构时,具体实现方式却与MyISAM截然不同:InnoDB的数据文件本身就是索引文件,叶节点包含了完整的数据记录(聚集索引)
  • 聚集索引使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录
    InnoDB_1
    InnoDB_2

3. 两者区别

  • MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址
  • InnoDB叶节点包含了完整的数据记录,且辅助索引data域存储相应记录主键的值而不是地址。

优势

  • B+树做主键索引相比B树的优势:
    B+树所有值都在叶子结点,遍历方便,方便进行区间查找;对于没有建立索引的字段,全表扫描的遍历很简单;分支结点只存储key,所占空间小,可以尽可能加载到缓存。

B*树

定义

  • B*树,是B+树的变形,是在B+树基础上优化的多路平衡搜索树

插入操作

  • B*树的插入操作与B+树基本类似,区别在于:
  • 当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字(因为兄弟结点的关键字范围改变了);
  • 如果兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/3的数据到新结点(原结点的后1/3数据,兄弟结点的前1/3数据),最后在父结点增加新结点的指针。
    所以,B*树分配新结点的概率比B+树要低,空间使用率更高
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值