第十九:b+树和b-树
优点一: B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。
优点二: B+树所有的Data域在叶子节点,并且所有叶子节点之间都有一个链指针。 这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦。在数据库中基于范围的查询是非常频繁的,而B树不支持这样的遍历操作。
1)B+树空间利用率更高,可减少I/O次数
B+树的叶子节点是按顺序放置的双向链表
3)B+树的查询效率更加稳定
因为B+树的每次查询过程中,都需要遍历从根节点到叶子节点的某条路径。所有关键字的查询路径长度相同,导致每一次查询的效率相当。

只有叶子节点存储data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针。
后来又在B+树上增加了顺序访问指针,也就是每个叶子节点增加一个指向相邻叶子节点的指针,这样一棵树成了数据库系统实现索引的首选数据结构。
小结:B树和B+树的区别
1)B树的每个结点都存储了key和data,B+树的data存储在叶子节点上。
节点不存储data,这样一个节点就可以存储更多的key。可以使得树更矮,所以IO操作次数更少。
2)树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录
由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。
树高度越小,I/O次数越少。 为什么是B+树而不是B树呢,因为它内节点不存储data,这样一个节点就可以存储更多的key。

B 树:在 B 树中,所有的节点(包括叶节点和内部节点)都存储数据。对于一个节点,它的键值和数据一并存储。查找过程中,如果找到了匹配的键,则返回相应的数据。
B+ 树:与 B 树不同,B+ 树的所有数据都存储在叶节点中,非叶节点只存储键值,并且起到索引作用。在 B+ 树中,叶节点之间通过指针连接,形成一个链表,这使得范围查询更加高效。
————————————————
范围查询性能更好:
B+ 树的叶节点按照顺序连接形成链表,这使得范围查询时,可以顺序扫描叶节点,非常高效。而 B 树的节点存储了数据,每次范围查询都需要频繁跳转到不同的节点,性能较差。
数据存储集中在叶节点:B+ 树的数据集中在叶节点,不会占用内部节点的存储空间,这使得 B+ 树的叶节点可以存储更多的数据,减少磁盘 I/O 操作。
一致性更高:由于 B+ 树非叶节点不存储数据,只存储键值,它们的高度更低,减少了搜索的复杂度。
————————————————
B+ 树的优势
优化磁盘存储:B+ 树通过较大的节点大小来提高磁盘存取效率,可以一次性读取更多的键值,从而减少磁盘 I/O 次数。
顺序遍历性能:B+ 树的叶节点之间有链表结构,适合做范围查询,顺序遍历叶节点时性能更高。
支持大数据量:由于 B+ 树的节点可以存储更多的键值,它能够处理更大规模的数据。
良好的缓存命中率:较高的节点容量可以让更多的键值存储在内存中,提升缓存的命中率,减少磁盘访问。
————————————————
- B+ 树:数据存储在叶节点,内部节点仅存储键值,叶节点通过链表连接,支持高效的范围查询和较少的磁盘 I/O。
B+树的叶子节点存储数据,而非叶子节点只存储指针,不存储数据。B树的所有节点(包括叶子节点)都存储数据,数据分布在整个树结构中。
叶子节点连接:B+树的叶子节点通过有序的双向链表相连,而B树的叶子节点不相连。
🔍 区间查询效率:由于B+树的叶子节点相连,范围查询效率更高。因此,在存在大量范围查询的场景中,B+树更为适合。而对于大量单个key查询的场景,B树可能更合适
总结:
| 特性 | B树(B-Tree) | B+树(B+Tree) |
|---|---|---|
| 节点存储内容 | 内部节点和叶子节点都存储数据 | 只有叶子节点存储数据,内部节点只存储键 |
| 叶子节点结构 | 叶子节点之间没有直接链接 | 叶子节点通过双向链表连接,支持快速遍历 |
| 插入/删除操作 | 插入/删除可能影响多个层级的节点 | 插入/删除主要集中在叶子节点,稳定性好 |
| 磁盘I/O优化 | 每个节点存储数据,磁盘I/O次数较多 | 内部节点只存储键,磁盘I/O次数较少 |
| 适用场景 | 适合精确查询,范围查询性能较差 | 适合精确查询和范围查询,性能更好 |
-
所有值只存储在叶子节点中。
-
非叶子节点只存储关键字和指向子节点的指针。
-
叶子节点之间通过指针相连,形成一个有序链表,这使得范围查询非常高效。
-
非叶子节点不存储数据,只存储键值和指向子节点的指针,这样可以使得内部节点更加紧凑,减少了磁盘I/O操作的需求。
相关文章:
第十九:b+树和b-树
优点一: B树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。 优点二: B树所有的Data域在叶子节点,并且所有叶子节点之间都有一个链指针。 这样遍历叶子节点就能获得全部数据,这样…...
前沿科技:社会性交互技术原理与核心概念解析
社会性交互中的**情感识别(Emotion Recognition)与拟人化行为生成(Human-like Behavior Generation)**是构建自然、可信人机交互的核心技术,尤其在虚拟助手、社交机器人、元宇宙角色等场景中至关重要。以下是其技术原理、核心方法与实际应用的系统解析: 一、情感识别:从…...
深入浅出Redis 缓存使用问题 | 长文分享
目录 数据一致性 先更新缓存,后更新数据库【一般不考虑】 先更新数据库,再更新缓存【一般不考虑】 先删除缓存,后更新数据库 先更新数据库,后删除缓存【推荐】 怎么选择这些方案?采用哪种合适? 缓存…...
操作系统 3.6-内存换出
换出算法总览 页面置换算法 FIFO(先进先出): 最简单的页面置换算法,淘汰最早进入内存的页面。 优点:实现简单。 缺点:可能会导致Belady异常,即增加内存反而降低性能。如果刚换入的页面马上又要…...
【Amazon EC2】为何基于浏览器的EC2 Instance Connect 客户端连接不上EC2实例
文章目录 前言📖一、报错先知❌二、问题复现😯三、解决办法🎲四、验证结果👍五、参考链接🔗 前言📖 这篇文章将讲述我在 Amazon EC2 上使用 RHEL9 AMI 时无法连接到 EC2 实例时所遇到的麻烦😖 …...
Java并发编程:深入解析原子操作类与CAS原理
一、原子操作类概述 Java并发包(java.util.concurrent.atomic)提供了一系列原子操作类,这些类通过无锁算法实现了线程安全的操作,相比传统的锁机制具有更高的性能。原子类基于CAS(Compare-And-Swap)指令实现,是现代并发编程的重要基础。 原…...
新一代AI低代码MES,助力企业数字化升级
随着DeepSeek低成本AI模型的火热,对于传统的MES而言,在这场AI的盛宴中,该如何去调整产品的定位,让MES更符合工业企业的需求呢? 工业互联网、AI、数字孪生等技术加速与MES融合,实现生产全流程的实时监控与智…...
位运算与实战场景分析-Java代码版
一、为什么每个程序员都要掌握位运算? 在电商秒杀系统中,位运算可以快速判断库存状态;在权限管理系统里,位运算能用极小的空间存储复杂权限配置;在算法竞赛中,位运算更是高频出现的性能优化利器。这项看似…...
面试之《前端信息加密》
前端代码是直接暴漏给用户的,请求的接口也可以通过控制台network看到参数,这是不够安全的,如果遇到坏人想要破坏,可以直接修改参数,或者频繁访问导致系统崩溃,或数据毁坏。 所以信息加密在某些场合就变得非…...
CentOS 系统磁盘扩容并挂载到根目录(/)的详细步骤
在使用 CentOS 系统时,经常会遇到需要扩展磁盘空间的情况。例如,当虚拟机的磁盘空间不足时,可以通过增加磁盘容量并将其挂载到根目录(/)来解决。以下是一个完整的操作流程,详细介绍了如何将新增的 10G 磁盘…...
HTML应用指南:利用GET请求获取全国汉堡王门店位置信息
在当今快节奏的都市生活中,餐饮品牌的门店布局不仅反映了其市场策略,更折射出消费者对便捷、品质和品牌认同的追求。汉堡王(Burger King)作为全球知名的西式快餐品牌之一,在中国市场同样占据重要地位。自进入中国市场以…...
浅入浅出 GRPO in DeepSeekMath
GRPO in DeepSeekMath GRPO 通过在生成组内进行比较来直接评估模型生成的响应,以优化策略模型,而不是训练单独的价值模型,这种方法显著降低了计算成本。GRPO 可以应用于任何可以确定响应正确性的可验证任务。例如,在数学推理中&a…...
计算机网络起源
互联网的起源和发展是一个充满创新、突破和变革的历程,从20世纪60年代到1989年,这段时期为互联网的诞生和普及奠定了坚实的基础。让我们详细回顾这一段激动人心的历史。 计算机的发展与ARPANET的建立(20世纪60年代) 互联网的诞生…...
HTML 嵌入标签对比:小众(<embed>、<object>) 与 <iframe> 的优缺点及使用场景和方式
需求背景 在网页开发中,嵌入外部资源预览(如视频、PDF、地图或其他网页)是常见的需求。HTML 提供了多种标签来实现这一功能,其中 <embed>、<object> 和 <iframe> 是最常用的三种。本文将对比它们的优缺点&…...
[python] 作用域
Python中查找变量的顺序遵循LEGB规则(Local->Enclosing->Global->Built-in)。Python中的if/elif/else、for/while等代码块不会创建新的作用域,只有def、class、lambda才会改变作用域。这和C中不同,C中在{}代码块中创建的变量离开这个代码块后就…...
AICon 2024年全球人工智能与大模型开发与应用大会(脱敏)PPT汇总(36份).zip
AICon 2024年全球人工智能与大模型开发与应用大会(脱敏)PPT汇总(36份).zip 1、面向开放域的大模型智能体.pdf 2、企业一站式 AI 智能体构建平台演进实践.pdf 3、PPIO 模型平台出海实战,跨地域业务扩展中的技术优化之道…...
51电子表
设计要求: 基本任务: 用单片机和数码管设计可调式电子钟,采用24小时制计时方式,要求能够稳定准确计时,并能调整时间。发光二极管每秒亮灭一次。电子钟显示格式为:时、分、秒各两位,中间有分隔…...
9-函数的定义及用法
一.前言 C 语⾔强调模块化编程,这⾥所说的模块就是函数,即把每⼀个独⽴的功能均抽象为⼀个函数来实现。从⼀定意义上讲,C 语⾔就是由⼀系列函数串组成的。 我们之前把所有代码都写在 main 函数中,这样虽然程序的功能正常实现&…...
高清视频会议系统BeeWorks Meet,支持私有化部署
在数字化办公时代,视频会议已成为企业协作的关键工具。然而,随着信息安全意识的不断提高,传统的公有云视频会议软件已难以满足企业对数据安全和隐私保护的严格要求。BeeWorks Meet凭借其独特的私有化部署模式、强大的功能集成以及对国产化的适…...
用HTML和CSS绘制佩奇:我不是佩奇
在这篇博客中,我将解析一个完全使用HTML和CSS绘制的佩奇(Pig)形象。这个项目展示了CSS的强大能力,仅用样式就能创造出复杂的图形,而不需要任何图片或JavaScript。 项目概述 这个名为"我不是佩奇"的项目是一个纯CSS绘制的卡通猪形象…...
彩讯携Rich AICloud与一体机智算解决方案亮相中国移动云智算大会
2025年4月10日,2025中国移动云智算大会在苏州盛大开幕,本次大会以“由云向智 共绘算网新生态”为主题,与会嘉宾围绕算力展开重点探讨。 大会现场特设区域展出各参会单位的最新算力成果,作为中国移动重要合作伙伴,彩讯…...
BERT - 直接调用transformers.BertModel, BertTokenizerAPI不进行任何微调
本节代码将使用 transformers 库加载预训练的BERT模型和分词器(Tokenizer),并处理文本输入。 1. 加载预训练模型和分词器 from transformers import BertTokenizer, BertModelmodel_path "/Users/azen/Desktop/llm/models/bert-base-…...
安卓开发提示Android Gradle plugin错误
The project is using an incompatible version (AGP 8.9.1) of the Android Gradle plugin. Latest supported version is AGP 8.8.0-alpha05 See Android Studio & AGP compatibility options. 改模块级 build.gradle(如果有独立配置):…...
声学测温度原理解释
已知声速,就可以得到温度。 不同温度下的胜诉不同。 25度的声速大约346m/s 绝对温度-273度 不同温度下的声速。 FPGA 通过测距雷达测温度,固定测量距离,或者可以测出当前距离。已知距离,然后雷达发出声波到接收到回波的时间&a…...
Cuto壁纸 2.6.9 | 解锁所有高清精选壁纸,无广告干扰
Cuto壁纸 App 提供丰富多样的壁纸选择,涵盖动物、风景、创意及游戏动漫等类型。支持分类查找与下载,用户可轻松将心仪壁纸设为手机背景,并享受软件内置的编辑功能调整尺寸。每天更新,确保用户总能找到新鲜、满意的壁纸。 大小&am…...
C语言 AI 通义灵码 VSCode插件安装与功能详解
在 C 语言开发领域,一款高效的编码助手能够显著提升开发效率和代码质量。 通义灵码,作为阿里云技术团队打造的智能编码助手,凭借其强大的功能,正逐渐成为 C 语言开发者的新宠。 本文将深入探讨通义灵码在 C 语言开发中的应用&am…...
二分查找5:852. 山脉数组的峰顶索引
链接:852. 山脉数组的峰顶索引 - 力扣(LeetCode) 题解: 事实证明,二分查找不局限于有序数组,非有序的数组也同样适用 二分查找主要思想在于二段性,即将数组分为两段。本体就可以将数组分为ar…...
1.2 测试设计阶段:打造高质量的测试用例
测试设计阶段:打造高质量的测试用例 摘要 本文详细介绍了软件测试流程中的测试设计阶段,包括测试用例设计、测试数据准备、测试环境搭建和测试方案设计等内容。通过本文,读者可以系统性地了解测试设计的方法和技巧,掌握如何高效…...
【模拟电路】稳压二极管/齐纳二极管
齐纳二极管也被称为稳压二极管,是一种特殊的二极管,其工作原理是利用PN结的反向击穿状态。在齐纳二极管中,当反向电压增加到一定程度,即达到齐纳二极管的击穿电压时,反向电流会急剧增加,但此时齐纳二极管的电压却基本保持不变。这种特性使得齐纳二极管可以作为稳压器或电…...
项目周期过长,如何拆分里程碑
应对项目周期过长,合理拆分里程碑需要做到:明确项目整体目标与阶段目标、合理进行任务细分与分组、设定阶段性里程碑节点、实施有效的进度跟踪与反馈机制、灵活进行里程碑调整。其中,明确项目整体目标与阶段目标尤为关键。这能够帮助团队在长…...
