B 树和 B+ 树有什么区别?
未标记
考查重点:节点存储与范围扫描。B 树内部节点可存记录,B+ 树记录集中叶层并用叶链串联;后者内部扇出高,范围扫描更顺畅
本题目录
参考答案
核心回答
B 树和 B+ 树都是多路平衡搜索树,主要区别是记录的存放位置,以及叶子层的组织方式。 多路意味着一个节点可以包含多个有序键和多个子节点,适合按页存储;平衡则让叶子保持在同一层,避免普通二叉搜索树退化成长链。
按常见的结构定义比较:
B 树:内部节点和叶子节点都可以保存键对应的记录或记录位置。查找时若在内部节点命中,就可能提前结束。B+ 树:内部节点主要保存分隔键和子节点指针,记录或记录位置集中在叶子层;查找目标记录通常要到叶子。叶子之间按键顺序连接,方便继续顺序访问。- 页容量的取舍:在页大小相同、记录负载较大的情况下,
B+ 树内部页不放这些记录负载,通常能放更多导航项,形成更大的分支数,有利于降低树高和内部页缓存成本。
因此,B+ 树很适合数据库中常见的等值查找加范围扫描组合;这不表示 B 树不能范围查询,也不表示 B+ 树在任何单点查询或更新场景都一定更快。
范围查询为什么更适合 B+ 树?
假设要读取键在20到40之间的记录。
B+ 树可以先沿内部节点找到第一个满足范围的叶子位置,再沿叶子链接依次访问,直到超过40。通常不必为范围中的每个键都从根重新查找。
B 树的记录可能分布在内部节点和叶子节点,范围查询需要按树的有序遍历规则,把这些位置中的记录都纳入结果。B 树同样能够做范围查询,只是没有相同的纯叶子扫描路径。
连续叶子访问还便于批量读取和预读,但叶子在逻辑上相邻,不保证对应磁盘页物理连续。真正的读取成本仍取决于缓存命中、页布局、范围大小等因素。
查找和更新各有什么特点?
B 树有机会在内部节点命中,某次单点查找可能访问更少层级;B+ 树查找记录通常到叶子,同一棵树的这类路径深度更一致。不过,缓存状态、节点内搜索和记录宽度都会影响耗时,不能仅凭“到叶子”或“提前命中”判断实际快慢。
插入和删除时,两者都要维护排序与平衡,可能发生页分裂、重分配、合并以及父节点更新;变化也可能沿路径向上传播。B+ 树把记录集中在叶子层,能让导航与数据访问的分工更清楚,但并没有免除这些维护成本。
常见追问
B+ 树叶子一定存整行数据吗? 不一定,取决于索引实现。InnoDB 聚簇索引的叶子保存行记录,普通二级索引保存索引列和主键;其他实现也可以保存记录定位符。B+ 树这个名字本身不能决定叶子存的是哪一种值。
内部和叶子上出现相同键,是把业务数据存了两份吗? 通常是内部用于导航的分隔键与叶子记录键有所重复,不代表整行记录也复制到内部。具体分隔规则和键压缩方式可以因实现不同而变化。
三层树是不是固定三次磁盘 I/O? 不是。树高描述逻辑访问层级,缓存中的页可以直接在内存访问;范围扫描、回表和其他页面访问又会增加工作量,不能据此给出固定物理 I/O 次数。
参考资料
- 国内:JavaGuide:MySQL索引详解:B 树与 B+ 树的节点内容、范围访问及聚簇/二级索引讨论,用于连接通用结构与数据库里的叶子记录。
- 国内:小林coding:为什么MySQL采用B+树作为索引?:B 树、B+ 树和范围查询部分,用于解释记录集中在叶子后,导航页与连续扫描各自获得什么便利。
- 国内:美团技术团队:MySQL索引原理及慢查询优化:借鉴多路页导航与键宽的分析,解释正文中内部页容量如何影响分支数、树高和缓存成本。
- 国外:CMU 15-445/645:B+Tree项目规格(2025):参考 Internal Page、Leaf Page 与迭代器的实现说明,解释正文中内部页导航、叶子记录定位与有序遍历的分工,以及分裂、合并和重分配的维护成本。
- 国外:MySQL 8.4:The Physical Structure of an InnoDB Index:借鉴叶子页记录、页容量和填充管理的说明,补充正文对按页组织的解释,并交代实际访问成本不能只由抽象树高推断。
相关面经
13 篇蚂蚁集团
AI Agent 应用工程师MySQL索引优先选用B+树的原因,对比B树的区别
华顺信安
Go 开发实习生B+树和B树的区别
字节跳动
Agent 开发为什么数据库索引常用 B+ 树,而不是二叉搜索树、红黑树或 B 树?
科大讯飞、首都在线、宇量晟、四川长虹、度小满、字节跳动、恒生电子、腾娱互动、金蝶、汽车之家
面试官给我一种不友善的感觉。抓着我项目里的qps,rt等数据一直问。无场景题,手撕二分查找。问了很多基础知识,二叉树,平衡二叉树怎么旋转,b树,这些答的不太好,好久没复习,应该是挂在这里了。
美的
后端开发工程师b+树的性质
展开剩余 8 篇面经
腾讯
后端开发工程师为什么不用 B 树,而选择 B+ 树?
美团
AI 全栈开发工程师MySQL索引底层为什么用B+树?和B树有什么区别
去哪儿
AI 应用开发工程师和B有什么区别、为什么有最左前缀原则、计算最大行数
小红书、百度
B+ 树和 B 树的区别是啥?
字节跳动
后端开发工程师(AI / Agent 方向)B+树和B树的区别?
字节跳动
后端开发工程师(AI / Agent 方向)mysql: 红黑树, b,b+树。
阿里巴巴
大模型开发工程师你对 B +树有了解嘛?
字节跳动
Agent 开发工程师3 MySQL,b+树原理和场景,其他索引实现方案了解吗(不了解)






