【mysql】mysql中为什么使用B+树作为索引结构?

关于这个问题,我觉得可以从以下几个方面来回答。

        首先,常规的数据库存储引擎,都是使用B树或者B+树来实现索引的存储。而B树是一种多路平衡树,用这个存储结构来存储大量的数据,它的整个树的高度会矮很多(比如相比较于二叉树)。

        对于数据库来说,数据的存储是在磁盘上的,众所周知,磁盘IO的效率是非常低的,特别是随机的磁盘IO效率会更低。所以,树的高度能够决定磁盘IO的次数,磁盘IO越少,对于性能的提升就越大。这就是为什么采用B树作为索引结构的原因。

        在mysql的InnoDB存储引擎里,使用了一种增强的B树结构,也就是B+树来作为索引和数据的存储结构。相比较于B树,B+树做了几个方面的优化。

1. B+树所有的数据都存储在叶子节点,非叶子节点只存储索引。这意味着每一层存储的索引数量会增加,也就是在层高相同的情况下,B+树的存储量要比B树要多,磁盘IO次数更少。

2. B+树叶子节点的数据之间使用的是双向链表结构,所以在执行范围查询的时候,只需要在节点之间遍历就可以了,而B树需要遍历整棵树。

3. 在数据检索方面,由于数据都存储在叶子节点,所以B+树的IO次数更稳定一些。

4. 基于B+树的结构特点,如果采用自增的整型作为主键,可以避免增加数据的时候,带来叶子节点分裂导致的大量的运算的问题。

总的来说,技术方案的选型是为了解决特定业务场景的问题,也不是说B+树就一定是最优的选择,像MongoDB就是采用的B树的结构,这本质上也是关系型数据库和非关系型数据库的差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值