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 次数。

参考资料

相关面经

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+树原理和场景,其他索引实现方案了解吗(不了解)

相关题目

4 题