MySQL索引为什么选择B+树,而不是二叉树、红黑树、B树?

12.1.为什么没有选择二叉树?

二叉树是一种二分查找树,有很好的查找性能,相当于二分查找。

二叉树的非叶子节值大于左边子节点、小于右边子节点。

原因:

但是当N比较大的时候,树的深度比较高。数据查询的时间主要依赖于磁盘IO的次数,二叉树深度越大,查找的次数越多,性能越差。

最坏的情况是退化成了链表。

12.2.为什么没有选择红黑树?

红黑树相比于二叉树,它做了进一步的优化,它是一种自适应的平衡树,会根据插入的节点数量以及节点信息,自动调整树结果来维持平衡。

原因:

红黑树查找结尾的元素的时候,树的高度越高,增删改查所需要的IO次数也越多,会严重影响性能(相当于做了全表扫描)。

12.3.为什么没有选择B树?

B树和红黑树相比,其单节点可容纳多个数量,就能在很大程度上改善其性能,使B树的树高远远小于红黑树的高度。

原因:

虽然对比之前的红黑树更矮,检索数据更快,由于叶子节点没有指针,但对于大范围查询的需求,依旧需要通过多次磁盘IO来操作。

12.4.为什么选择B+树

B+树是在B树的基础上进一步优化,一方面节点分为了叶结点和叶子节点两类,另一方面叶子节点之间存在单向链表指针。

(1)叶子节点上存在单向链表指针,便于范围查找;

(2)树的节点分为了叶结点和叶子节点。

MySQL底层真正的索引结构还对叶子节点之间的指针进行了优化,B+树的叶子节点的单向指针无法友好支持倒叙查询,因此MySQL针对单向指针优化成了双向指针,

也就是双向链表结构。即可以快速按正序进行范围查询,而可以快速按倒序进行范围操作。

相关推荐
布莱克60536 分钟前
理解 MySQL 架构:从连接层到存储引擎
mysql
围炉聊科技2 小时前
长期免费的数据库方案——零成本基建系列
数据库
AC赳赳老秦2 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
梁辰兴4 小时前
软件工程:数据结构设计
数据库·软件工程·设计原则·设计方法·梁辰兴·数据库结构设计·数据库结构类型
AC赳赳老秦4 小时前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
灯澜忆梦5 小时前
【MySQL18】进阶篇 | MySQL管理
数据库·mysql
zcmodeltech5 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
AI多Agent协作实战派5 小时前
AI多Agent协作系统实战(四十):AI说“没有错误“,系统判了“测试失败“——一个正则的误判
数据库·人工智能
隔窗听雨眠6 小时前
OceanBase接入DeepSeek:数据库与AI的深度融合如何改写企业数据规则
数据库·人工智能·oceanbase
lv__pf6 小时前
spring之整合mybatis【TL spring 12】
mysql·spring·mybatis