当前位置: 首页 > news >正文

B+树存储结构

是的,InnoDB 的聚簇索引 B+Tree 中,只有叶子节点(最底层)保存完整数据记录,非叶子节点(根节点和中间节点)只保存索引信息用于导航查找。

假设有一个三层 B+Tree:

[根节点] 100 | 200 | 300 / | \ / | \ [中间节点] [中间节点] [中间节点] 50|80 150|180 250|280 / | \ / | \ / | \ [叶子节点][叶子节点][叶子节点]...

第一层(Root 根节点)

存储:

主键值(索引键) + 子节点页指针

例如:

100 | 200 | 300

表示:

id < 100 100 <= id < 200 200 <= id < 300 id >= 300

以及对应子节点所在的数据页地址。

不存完整数据。


第二层(非叶子节点)

存储:

索引键 + 下一层页指针

例如:

50 | 80

表示:

id < 50 50 <= id < 80 id >= 80

仍然不存完整数据。


第三层(叶子节点)

聚簇索引叶子节点:

(id=1,name=Tom,age=18) (id=2,name=Jack,age=20) (id=3,name=Lucy,age=22)

存储的是:

整行记录

例如:

主键 其它列 事务信息 隐藏列

为什么非叶子节点不存完整数据?

为了提高"扇出(Fan Out)"。

假设:

情况1:非叶子节点只存 key

id

一个16KB页可以放:

1000多个key

树会非常矮:

1000 1000 × 1000 = 100万 1000 × 1000 × 1000 = 10亿

三层就能管理十亿条记录。


情况2:非叶子节点存完整数据

例如:

id name phone address ...

每条记录变大。

16KB页可能只能放:

几十条

树高度会迅速增加。

查询磁盘IO次数也增加。

所以B+Tree设计成:

非叶子节点 只存索引键 叶子节点 存真实数据

聚簇索引查找过程

例如:

SELECT * FROM user WHERE id = 150;

执行过程:

Root 100 | 200 | 300 ↓ Middle 150 | 180 ↓ Leaf (id=150,name=Tom,...)

查找路径:

根节点 ↓ 中间节点 ↓ 叶子节点

找到数据。


如果是普通索引呢?

例如:

create index idx_name on user(name);

叶子节点就不一样了。

Tom -> 1 Jack -> 2 Lucy -> 3

叶子节点保存:

name + 主键id

而不是完整数据。

因此:

select * from user where name='Tom';

需要:

name索引树 ↓ 得到 id=1 ↓ 主键索引树 ↓ 得到完整记录

这就是回表。


面试一句话总结

InnoDB 的 B+Tree 中,根节点和中间节点只保存索引键值以及子节点页指针,用于缩小查找范围;只有叶子节点才保存数据。对于聚簇索引,叶子节点保存完整行记录;对于二级索引,叶子节点保存索引列值和主键值,因此查询时可能需要回表。

http://www.zskr.cn/news/1535328.html

相关文章:

  • 【优化调度】基于遗传算法GA异构分布式计算系统上实时并行工作流的能量最小化调度附Matlab代码
  • 【Lucene】`IndexWriter` 内部是如何管理内存中的文档(`DocumentsWriter`)并将其刷入段的?
  • [数据结构]《时间复杂度优化误区:单层 for 真的比双层更快吗?》
  • 闲置黄金如何变现 2026黔西南回收价格与靠谱门店指南 - 余生黄金回收
  • 哔哩哔哩Linux客户端:打破平台限制的完整解决方案
  • 企业为什么要统一管理Agent
  • Modus Themes性能优化:让高对比度主题在低配电脑上流畅运行的终极指南
  • 2026年6月国内靠谱的泡沫托厂家选哪家,水果泡沫箱/草莓泡沫包装箱/海鲜泡沫包装箱/工业品泡沫箱,泡沫托定制哪家好 - 品牌推荐师
  • 基于矮猫鼬优化算法DMOA的多无人机协同集群避障路径规划算法研究,目标函数:最低成本:路径、高度、威胁、转角附Matlab代码
  • GR-3(通用机器人VLA模型)
  • 美团浏览器:面向本地服务优化的垂直浏览器架构解析
  • C++模板及实战,以及重载运算符
  • 临汾市_临汾市奢侈品回收门店红黑榜:综合实力最强的五家店铺推荐 - 奢金汇
  • Telegraph Webhook 完全指南:实现实时消息处理与事件响应
  • 申论笔记pdf百度云|网盘|电子版
  • 临沂市_临沂市奢侈品手表包包回收价格差距高达15%:实测对比告诉你哪家店报价最实在 - 奢金汇
  • 一个被忽略的行草范本:傅山这轴六言诗,藏着“行气不断”的密码,新手也能用
  • 小白程序员必看:收藏这份交通大模型(8大领域+116案例)学习指南
  • 收藏!小白程序员必备:大模型时代黄金三年,5大AI岗位助你逆势起飞!
  • 七台河市_2026年七台河市奢侈品手表包包回收门店权威测评:这五家店铺回收价格最高 - 奢金汇
  • 大模型MoE稀疏激活原理与工程实践全解析
  • 3分钟快速安装:Figma中文汉化插件完整指南
  • 资管档案数智化实战:如何利用AI Agent解决RAG知识库与行业制度的同步难题?
  • 倾转旋翼VTOL无人机的高保真6自由度纵向飞行动力学模拟器和闭环GNC堆栈,稳定悬停保持LQR、动态控制混合和固定翼巡航MATLAB 和 Simulink
  • GR3六轴工业协作机械臂GR3六轴工业协作机械臂技术档案摘要(601-616) 该文档详细介绍了GR3机械臂的核心控制算法和功能模块实现,主要包括: 运动控制:采用自适应终端滑模控制实现高精度轨迹
  • 制造业汽车零配件EDI软件场景方案
  • 人工智能与数据科学:关系、差异与未来展望
  • 三步掌握Python通达信数据接口:MOOTDX让量化分析变简单
  • 2026企业级AI Agent选型实战:深度拆解安全审计与信创适配核心指标
  • C#调用本地大模型实战:Ollama+Qwen零成本集成指南