当前位置: 首页 > 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.jsqmd.com/news/1023465/

相关文章:

  • 云环境停机问题升级:复杂性与流程故障成主因,云服务改进聚焦规范运营
  • 【Lucene】`IndexWriter` 内部是如何管理内存中的文档(`DocumentsWriter`)并将其刷入段的?
  • 手机微信制作投票活动发布详细步骤 - 投票评选活动
  • CAJ转PDF终极指南:3步轻松解锁学术文献自由
  • 【优化调度】基于遗传算法GA异构分布式计算系统上实时并行工作流的能量最小化调度附Matlab代码
  • Hotkey Detective:5分钟定位Windows热键冲突的侦探工具
  • Kubernetes 编程 / Operator 专题【左扬精讲】—— 深入理解 ManagedFields 字段冲突协调机制
  • 3个理由让你选择Awesome-Deep-Community-Detection:从复杂网络中发现隐藏社区的终极指南
  • 碧蓝航线全自动脚本终极指南:如何彻底解放双手告别肝游戏
  • HarmonyOS pc实战之Column 的 alignItems的交叉轴对齐
  • 架构师视点:基于 Docker 与边缘计算的百路异构视频中台,如何实现 GB28181/RTSP 统一接入与源码交付?
  • GOES卫星火点监测实战:从亮温反演到村级预警终端
  • CANN Graph AutoFusion深度实践:昇腾NPU计算图自动算子融合的Pass调度策略与内存带宽优化调优实录
  • 闲置黄金如何变现 2026黔西南回收价格与靠谱门店指南 - 余生黄金回收
  • ppt模板_0099_深蓝网格
  • 基于Swoole和ThinkPHP6的高性能开源客服系统设计与实现——以众邦科技CRMChat为例
  • [数据结构]《时间复杂度优化误区:单层 for 真的比双层更快吗?》
  • 微信平台搭建投票评选活动完整流程 - 投票评选活动
  • 哔哩哔哩Linux客户端:打破平台限制的完整解决方案
  • 企业为什么要统一管理Agent
  • WELearn网课助手:告别熬夜刷题,5分钟实现英语学习效率翻倍
  • Modus Themes性能优化:让高对比度主题在低配电脑上流畅运行的终极指南
  • 聚簇索引和非聚簇索引的区别
  • Delta Lake + Flink 近实时数据湖 Schema 演化实战
  • 基于矮猫鼬优化算法DMOA的多无人机协同集群避障路径规划算法研究,目标函数:最低成本:路径、高度、威胁、转角附Matlab代码
  • 2026年6月国内靠谱的泡沫托厂家选哪家,水果泡沫箱/草莓泡沫包装箱/海鲜泡沫包装箱/工业品泡沫箱,泡沫托定制哪家好 - 品牌推荐师
  • PiStorm故障排除终极指南:常见问题解决和硬件兼容性检查清单
  • 临沧市_闲置爱马仕、劳力士变现指南:临沧市奢侈品手表包包回收门店实地测评 - 奢金汇
  • 乌鲁木齐闲置黄金变现攻略与靠谱门店推荐 - 余生黄金回收
  • GR-3(通用机器人VLA模型)