B+树 范围查询_Mysql为什么使用B+树而不是B树?

先有B树,后有B+树。但是B+树比B树更为出名,其原因在于Mysql使用B+树作为实现索引的数据结构。B+树和B树不同的地方有两个:1)B+树的非叶子节点不包括指向数据的指针,也就是非叶子节点只有索引数据;2)B+树的所有叶子节点包括了指向数据的指针,并且叶子节点是按索引顺序单向链在一起的。B+树的结构如下图:Mysql为什么使用B+树而不是B树作为实现索引的数据结构呢?原因有三点,在说...
摘要由CSDN通过智能技术生成

先有B树,后有B+树。但是B+树比B树更为出名,其原因在于Mysql使用B+树作为实现索引的数据结构。B+树和B树不同的地方有两个:1)B+树的非叶子节点不包括指向数据的指针,也就是非叶子节点只有索引数据;2)B+树的所有叶子节点包括了指向数据的指针,并且叶子节点是按索引顺序单向链在一起的。B+树的结构如下图:

127cf7d7480e8b7f3ee8253c9614aeb1.png

Mysql为什么使用B+树而不是B树作为实现索引的数据结构呢?原因有三点,在说明这三点之前,需要说明一下Mysql使用B+树的时候,其结点的大小是有设计的。由于B+树用来索引数据,因此Mysql把B+树每个结点的大小设计成内存页的大小一致,这么做的目的是让每次获取一个结点的数据时不需要跨内存页,增加了效率。这使得B+树每个节点能容纳的数据是有限的,这个点和下述的三个原因紧紧相关。

【原因一】 B+树的叶子节点链在一起增加范围查询的效率

为什么只有叶子节点存储数据指针呢?这样不是让每次查询都要查到叶子节点才能返回数据吗?背后的原因在于这么做虽然增加单次查询可能要多判断的情况,但是如果配合将叶子节点链在一起的方法,可以极大提高范围查询的效率。

以下图B树为例,如果要查询大于2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值