InnoDB存储引擎为什么会选择B+Tree作为索引

本文探讨了数据库存储引擎InnoDB选择B+Tree作为索引的原因。通过对比Hash表和不同类型的树结构,分析了B+Tree在支持范围查询、减少IO次数以及数据有序性方面的优势。B+Tree解决了数据量大时深度增加的问题,提供高效的数据检索性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、InnoDB存储引擎为什么会选择B+Tree作为索引
我们建立索引是为了啥?当然是为了能够快速匹配数据,这个时候k,v结构就特别符合我们的需求,当把id作为k,整行数据作为value,这样你查询的时候可以最快的速度取出数据。
什么样的数据结果能支持k-v存储呢?hash表和树(二叉树、红黑树、B树、B+树等)
当然除了键值对的形式外我们还需要让整个索引有序,这样可以方便查询范围(例如where id>1)。
既然我们确定了数据格式,下一步就需要找到合适的数据结构。Hash有个致命的缺点就是浪费内存。就像Figure 2这种极端情况下会额外浪费很多内存。而且Hash表中数据是无序的,更适用于等值查询,但是在实际工作环境中范围查找的数据更多,所以hash就不太适合。
在这里插入图片描述
图片来源于(https://www.cnblogs.com/s-b-b/p/6208565.html)

接下来我们考虑采用树状存储结构,但是树又分很多种我们应该用哪个呢?
首先是考虑采用二叉树还是多叉树?
答案是采用多叉树!为什么呢?
如果采用二叉树,那么当数据量越大的时候,这棵树就越深,树越深IO的次数就会越多(提高系统效率的两种方式:1、减少IO次数 2、减少IO量)
根据上述分析得出我们需要得出结论:我们需要找一个有多个分支且有序的多叉有序树。

此时发现B树很符合我们的要求
在这里插入图片描述
B树有两个缺点:
1、每个节点都有key,同事也包含data,每个页的存储空间是有限的,如果data比较大的话会导致每个节点存储的key数量变小
2、当存储的数据量很大的时候会导致深度较大,增大查询时磁盘IO次数,进而影响查询性能

为了解决这个dat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值