mysql为什么使用B+树

Mysql为什么使用B+树?

1、如何从磁盘中获取数据?(IO)

要获取磁盘上数据,必须先通过磁盘移动臂移动到数据所在的柱面,然后找到指定盘面,接着旋转盘面找到数据所在的磁道,最后对数据进行读写。磁盘IO代价主要花费在查找所需的柱面上,树的深度过大会造成磁盘IO频繁读写。

2、B+树优点

B树结构图

image-20201208113412204

B+树结构图

image-20201208113432733

(1)由上图B树结构图和B+树结构图可知,B树一个节点中的子节点不光包含Key也包含value,而B+树非叶子节点只存储key,不存储value,在实际存储过程中,value通常远大于key,因此B树一个节点中可以存储的子节点数量比B+树相同大小节点存储的子节点少。由于B树一个节点存储的子节点数量少,因此整个树的高度比B+树高,查询的时间复杂度也相对较高。

(2)B+树所有具体的数据都存在叶子节点上,所以每次查询都要查到叶子节点,查询速度比较稳定。

(3)B+树所有叶子节点构成了一个有序链表,做区间查询比较方便。

成了一个有序链表,做区间查询比较方便。

数据库系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入。为了达到这个目的,在实际实现B-Tree还需要使用如下技巧:每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值