B树与B+树:数据库索引背后的秘密

B-tree(B树)和B+tree(B+树)是两种高效的多叉树数据结构,专为磁盘存储系统优化设计,广泛应用于数据库和文件系统的索引。以下是两者的核心特点及区别:


⚙️ 一、B-tree(B树)

  1. 结构特性

    • 多路平衡 :每个节点可包含多个子节点(通常称为阶数 m ),非叶子节点存储 键值(Key)关联数据(Data)
    • 平衡规则
      • 根节点至少有 2 个子节点(除非为叶子节点);
      • 非根节点至少有 ⌈m/2⌉ 个子节点;
      • 所有叶子节点位于同一层。
  2. 数据存储

    • 键值+数据共存:非叶子节点既存储索引键,也存储实际数据记录。
    • 搜索灵活性:搜索可能在非叶子节点终止(若命中键值)。
  3. 适用场景

    • 实时查询系统:如 MongoDB 的默认索引,适合单点查询。

🚀 二、B+tree(B+树)

  1. 结构优化

    • 数据分离 :非叶子节点 仅存储键值 (不存实际数据),所有数据记录存放在 叶子节点
    • 叶子节点链表:叶子节点通过指针串联为有序链表,支持高效范围查询。
  2. 性能优势

    • 更高扇出:非叶子节点仅存键值,可容纳更多子节点,降低树高,减少 I/O 次数。
    • 顺序访问优化 :范围查询(如 WHERE id BETWEEN 10 AND 100)直接遍历叶子链表,无需回溯树。
  3. 适用场景

    • 数据库索引:如 MySQL InnoDB 引擎,尤其适合范围扫描和排序操作。

🔍 三、核心区别总结

特性 B-tree B+tree
非叶子节点数据 存储键值+数据 仅存储键值(无数据)
叶子节点结构 独立无链接 通过指针形成有序链表
查询终止位置 可能在任何非叶子节点命中 必须到达叶子节点
范围查询效率 低效(需回溯树) 高效(直接遍历叶子链表)

💡 四、典型应用

  • B-tree:文件系统(NTFS/Ext4)、MongoDB 索引。
  • B+tree:关系型数据库(MySQL、Oracle)、大型数据仓库索引。

两种结构均通过 多路平衡动态调整节点(分裂/合并)保持低树高,显著减少磁盘 I/O。B+tree 因数据分离和链表设计,在大数据量下综合性能更优,成为数据库索引的主流选择。

相关推荐
给大佬递杯卡布奇诺7 分钟前
FFmpeg 基本数据结构 URLContext分析
数据结构·c++·ffmpeg·音视频
deephub11 分钟前
构建有记忆的 AI Agent:SQLite 存储 + 向量检索完整方案示例
数据库·人工智能·sqlite·大语言模型·向量检索·智能体
无敌最俊朗@15 分钟前
SQlite:列级,表级约束
数据库
不剪发的Tony老师2 小时前
Mathesar:一款基于PostgreSQL的在线电子表格
数据库·postgresql·电子表格
万邦科技Lafite5 小时前
京东按图搜索京东商品(拍立淘) API (.jd.item_search_img)快速抓取数据
开发语言·前端·数据库·python·电商开放平台·京东开放平台
金仓拾光集6 小时前
__金仓数据库平替MongoDB实战:从多模兼容到高可用落地__
数据库·mongodb·数据库平替用金仓·金仓数据库
北邮-吴怀玉6 小时前
6.1.2.2 大数据方法论与实践指南-离线任务SQL 任务开发规范
大数据·数据库·sql
流烟默6 小时前
MongoDB索引创建语法分析
数据库·mongodb
金仓拾光集6 小时前
__国产化转型实战:制造业供应链物流系统从MongoDB至金仓数据库迁移全指南__
数据库·mongodb·数据库平替用金仓·金仓数据库
初学者_xuan6 小时前
零基础新手小白快速了解掌握服务集群与自动化运维(十五)Redis模块-Redis数据库基础
运维·数据库·自动化