【MySQL】查询原理 —— B+树查询数据全过程

使用B+树作为索引结构的原因:

一种自平衡树:

B+树在插入和删除的时候节点会进行分裂和合并操作,以保持树的平衡,存在冗余节点,使得删除的时候树结构变化小,更高效。

高度不会增长过快,查询磁盘I/O次数减少:

B+树是一种多叉树,非叶子节点只保存主键或索引值和页面指针,使得每一页能够容纳更多记录,内存中存放更多索引,容易命中缓存,查询I/O次数减少。

范围查询能力强:

叶子节点通过链表连接定位到叶子节点的起点后,只需要顺序扫描链表后续的数据,非常高效。

根节点开始,根据键值大小确定位置于左/右子树

非叶子节存储主键和页号,通过页号定位到叶子节点(默认16k大小),可存储多条数据。

通过页目录索引快速找到记录,页目录每个槽指向对应分组的最大记录。

通过二分查询,利用槽定位数据所在组。

InnoDB规定:

第一个分组只有一条记录

中间的分组4-8条记录

最后一个分组1-8条记录

B+树和B树的区别:

B+树更加稳定,平均,都要从根结点查询到叶子节点。

B+树便于区间查找,B树只能每一层遍历查找。

B树每个节点都存储数据,B+树存储key和指针,内存中可存放更多索引页,减少磁盘查询次数。

相关推荐
王五周八3 分钟前
从测试到执行计划:拆解 SQL 性能坑的底层逻辑
数据库·sql
霖霖总总6 分钟前
[小技巧49]深入 MySQL JOIN 算法:从执行计划到性能优化
mysql·算法·性能优化
Eugene Jou9 分钟前
Dinky+Flink SQL达梦数据库实时同步到Doris简单实现
数据库·sql·flink
玄同7659 分钟前
SQLAlchemy 会话管理终极指南:close、commit、refresh、rollback 的正确打开方式
数据库·人工智能·python·sql·postgresql·自然语言处理·知识图谱
【赫兹威客】浩哥10 分钟前
【赫兹威客】完全分布式HBase测试教程
数据库·分布式·hbase
一晌小贪欢12 分钟前
Python ORM 深度解析:告别繁琐 SQL,让数据操作如丝般顺滑
开发语言·数据库·python·sql·python基础·python小白
九号铅笔芯13 分钟前
社区评论系统设计
java·数据库·sql
码农多耕地呗20 分钟前
mysql之深入理解b+树原理
数据库·b树·mysql
踢足球092921 分钟前
寒假打卡:2026-01-26
数据库
angushine21 分钟前
鲲鹏ARM服务MySQL镜像方式部署主从集群
android·mysql·adb