B树和B+树

简介

1、必读https://www.playscala.cn/article/view?_id=10-5d318144eeab561d2405e2de

https://www.cnblogs.com/vincently/p/4526560.html

b树

1、每个节点最多拥有m个子树

2、根节点至少有2个子树

3、分支节点至少拥有m/2颗子树(除根节点和叶子节点外都是分支节点)

4、所有叶子节点都在同一层

5、每个节点最多可以有m-1个key,并且以升序排列

B+树

1、有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点;

2、叶子节点中包含了全部元素的信息,按照关键字的大小从左到右排序;

3、中间节点的元素同时存在于子节点中,在子节点元素中是最大。

B+树为什么更适合做索引

1、B+的非叶子节点只包含索引不包含数据,所以每个数据块可以存储更多的数据,B+树比B树更矮胖(磁盘io次数少

2、查询稳定(每次都会查到叶子节点)

3、范围查询简便(叶子节点链表遍历),B树需要进行中序遍历比较复杂

磁盘和B+树有什么关系

1、索引已B+树的数据结构存储在磁盘中,磁盘每次以磁盘块为单位进行读取

2、InnoDB存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位,因此InnoDB每次申请磁盘空间时都会是若干地址连续磁盘块来达到页的大小(默认16KB)

3、预读,每一次IO时,不仅仅把当前磁盘地址的数据加载到内存,同时也把相邻数据也加载到内存缓冲区中。(因为局部预读原理说明:当访问一个地址数据的时候,与其相邻的数据很快也会被访问到。)每次磁盘IO读取的数据我们称之为一页(page),这也就意味着读取一页内数据的时候,实际上发生了一次磁盘IO。


4、B+Tree的高度一般都在2~4层。mysql的InnoDB存储引擎在设计时是将根节点常驻内存的,也就是说查找某一键值的行记录时最多只需要1~3次磁盘I/O操作

红黑树

红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色可以是Red或Black。 通过任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。

红黑树的性质

  1. 每个结点不是红色就是黑色
  2. 根节点是黑色的
  3. 如果一个节点是红色的,则它的两个孩子结点是黑色的
  4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点
  5. 每个叶子结点都是黑色的(此处的叶子结点指的是空结点)

在这里插入图片描述

 

参考

2-3树
https://www.cnblogs.com/atai/p/9606757.html
https://mp.weixin.qq.com/s/rDCEFzoKHIjyHfI_bsz5Rw

B树
自平衡、矮胖节点内元素多些没有关系,因为是内存操作

b+树
https://www.jianshu.com/p/1f2560f0e87fb+树

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值