MySQL为什么使用B+树作为索引的数据结构?

本文探讨了MySQL中数据持久化对性能的影响,从数组、二叉搜索树到自平衡二叉树如红黑树,分析了它们在查询效率和磁盘I/O上的局限。最终提出B+树作为解决方案,其非叶子节点结构和双向链表设计有效解决了范围查询问题并减少磁盘I/O浪费。

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

需求:

性能方面,MySQL数据持久化存储在磁盘,查询需要读到内存,因此查询时间与磁盘I/O次数有关

还需要支持范围查询

关于数据结构,一步一步来:

首先是数组,但是存在问题:

1.数组查询时间复杂度为O(n),查询效率不高

2.往数组中插入元素后续元素都要后移一位,性能较低

接着想到二分法 - 二叉搜索树,但是存在问题:

1.二叉搜索树查询的时间复杂度为O(logn),但是极端情况下树会变成一个单链表,查找的时间复杂度退化为O(n),这是二叉搜索树不平衡的问题

于是想到自平衡二叉树 - 平衡二叉搜索树 / 红黑树,但是存在问题:

1.随着数据的增多,树的高度增加,磁盘I/O次数增加,性能下降

想到增加树的阶数以降低树的高度,即将二叉树改为多叉树 - B树,但是存在问题:

1.B树的结点存储索引和记录,如果要查找的数据靠近叶子节点(离根节点很远),就会把其他节点的数据读到内存中,而这些节点中的记录是没用的,造成了浪费

因此想到B+树

1.B+树的非叶子节点只存储索引,叶子节点存储索引和记录

2.B+树的叶子节点之间构成一个有序的双向链表,便于范围查询

3.B+树存在冗余节点,因此进行插入和删除操作树形结构变化很小

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值