MySQL索引数据结构总结

B树

在这里插入图片描述
一个结点要存下个子结点的指针、选择做索引的那列属性值、其他属性值

B+树

在这里插入图片描述
一个结点要存下个子结点的指针、选择做索引的那列属性值
叶结点存选择做索引的那列属性值和其他属性值
最后一层是链表连接

1、同等数据量时,B+Tree 的查询效率比 B-Tree 高,由于 B+Tree 的非叶子节点只存储 key 信息,而 B-Tree 的节点存储了 key + data,而每个页(一个节点)的大小是固定的,所以 B+Tree 的树高会更低一些
(我理解就是b+树的倒数第二层的每一个结点的选择做索引的那列属性值是这个结点的子树的选择做索引的那列属性值的最大值,所以B+树将很多结点都放在了最后一层,但是B树没有这样,每一层比较均匀,所以B+能压缩高度)
在这里插入图片描述
在这里插入图片描述
2、范围查询时,B+Tree 的效率远远高于 B-Tree,由于 B+Tree 的叶子节点存储了所有 key+data 信息,而且叶子节点之间有链指针,所有查询的时候 B+Tree 只需要找到 key 然后沿着链表遍历就可以了,而 B-Tree就需要一遍遍的从根节点开始查找(这就是链表的好处)
在这里插入图片描述
在这里插入图片描述
3、稳定性优化——B树的关键字分布在整颗树中,同一个关键字只会出现一次。B+树可能会出现多次,所有的叶子结点中包含了全部关键字的信息,B树搜索有可能在非叶子结点就结束搜索,而B+树必须搜索到叶子结点,但是锁定磁盘块指针消耗可以忽略不计;
(1.无论B树B+树,结点都是磁盘块,访问磁盘块数就是IO的次数,也就是访问结点次数就是IO次数。
2.对于访问一个指定数据,其IO次数就是对应数据的深度。
对于B+树,数据都是存在最后一层,IO次数固定就是树高
对于B树,数据存在在结点中,所以IO次数不固定
但是B+树层数比B树少,所以整体来看B+树的IO次数比B树少
3.对于访问指定范围的数据
对于B树,你每次只能访问一个数据,下一次访问要重头开始,这IO次数就太多了…
对于B+树,最后一层是链表,找到范围直接顺序访问即可)

转载:
https://blog.csdn.net/ywlmsm1224811/article/details/97890446
https://blog.csdn.net/John_D_B_Lee/article/details/119583528
https://blog.csdn.net/weixin_41751625/article/details/108171778

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值