B树和B+树的区别

B树 vs B+树

核心一句话:B+树只有叶子存数据、非叶子只存索引;B树所有节点都存数据。B+树更适合数据库、文件系统。

1. 节点存储内容(最核心区别)

  • B树
    每个节点(包括非叶子、叶子 )都存 关键字 + 数据/记录
  • B+树
    • 非叶子节点 :只存索引关键字,不存真实数据
    • 叶子节点 :存放全部数据记录,且叶子节点链表相连

2. 关键字与子节点关系

  • B树:n 个关键字 → n+1 个子节点
  • B+树:n 个关键字 → n 个子节点

3. 查找方式

  • B树:数据分散在各层,找到即停,可能在非叶子命中
  • B+树 :所有查找必须走到叶子节点 ;支持范围查询、全表遍历(顺着叶子链表走)

4. 磁盘IO(数据库重点)

  • B+树优势更大
    非叶子节点更小,一页能存更多索引 ,树更矮,磁盘IO次数更少。
    范围查询只遍历叶子链表,效率极高。

5. 应用场景

  • B树:文件系统索引(如NTFS)
  • B+树:MySQL InnoDB 索引、数据库主流索引结构

标准回答

  1. B树所有节点都存数据,B+树只有叶子存数据,非叶子只存索引。
  2. B+树非叶子节点更小,索引密度更高,树高更低,磁盘IO更少。
  3. B+树叶子节点连成链表,范围查询、排序、全表扫描远快于B树,所以MySQL用B+树。
相关推荐
雨落在了我的手上5 小时前
Java数据结构(十一):优先级队列(堆)
数据结构
带多刺的玫瑰10 小时前
Leecode#26刷题之删除有序数组中的重复项
数据结构·算法·leetcode
洋不写bug11 小时前
二叉树(二) 常见基础操作解析|结点数、树高、查找结点、判断完全二叉树
java·开发语言·数据结构·完全二叉树·二叉树结点数·树高·查找结点
化雨成烟11 小时前
C++之AVL树
数据结构
wabs66612 小时前
关于二叉树【429.N叉树的层序遍历的思考】
数据结构·c++·算法·leetcode·二叉树
C++ 老炮儿的技术栈13 小时前
MFC CPtrArray的用法
开发语言·数据结构·c++·算法·mfc·c
不会就选b13 小时前
算法日常・每日刷题--<贪心>6
数据结构·算法·leetcode
青山木14 小时前
Hot 100 --- 跳跃游戏 II
java·数据结构·算法·leetcode·贪心算法
神明不懂浪漫15 小时前
【第四章】索引——B+树、回表,加快数据库的查找能力的利器
开发语言·数据结构·数据库·经验分享·笔记·b树
LuminousCPP15 小时前
数据结构 - 排序(二):快速排序从错误初版到优化版|双指针划分 + 三数取中 + 小区间插入优化
c语言·数据结构·笔记·算法·排序算法