第十九: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域在叶子节点,并且所有叶子节点之间都有一个链指针。 这样遍历叶子节点就能获得全部数据,这样…...
SQL Server查询性能下降:执行计划不稳定与索引优化
问题现象: SQL Server 2022 中某些关键查询性能突然下降,执行时间从毫秒级增至数秒,日志中未报错,但查询计划显示低效的索引扫描或键查找。 快速诊断 捕获实际执行计划: -- 启用实际执行计划 SET STATISTICS XML, TIME…...
python mcp server最佳实践
文章目录 1、使用fastmcp包还是mcp包?要不要使用uv创建虚拟环境?编写mcp server代码测试cline配置小Tip2、使用stdio还是sse?其实能做的选择不多: 1、使用fastmcp包还是mcp包? 2、使用stdio还是sse? 1、使用fastmcp包还是mcp包? 个人建议选择后者,因为大模型说,后者…...
STM32看门狗应用实战:独立看门狗与窗口看门狗深度解析(下) | 零基础入门STM32第九十五步
主题内容教学目的/扩展视频看门狗什么是看门狗,原理分析,启动喂狗方法,读标志位。熟悉在程序里用看门狗。 师从洋桃电子,杜洋老师 📑文章目录 一、看门狗应用架构分析1.1 系统监控流程图1.2 双看门狗应用场景对比 二、…...
操作符详解
1.操作符的分类 算数操作符: 、- 、 * 、 / 、 %移位操作符:>>、 <<位操作符:& 、| 、^ 赋值操作符:、、-、/、%、<<、>>、&、|、^单目操作符:!、、- -、&、*、、…...
LeetCode 第41~43题
目录 LeetCode 第41题:缺失的第一个正数 LeetCode 第42题:接雨水 LeetCode 第43题:字符串相乘 LeetCode 第41题:缺失的第一个正数 题目描述: 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的…...
蓝桥杯web工作协调
在 JavaScript 里,Set 是一种内置对象,可存储任何类型的唯一值,无论是原始值还是对象引用。下面是 Set 集合常用方法的介绍: 1. 创建 Set 可以使用 new Set() 来创建一个空的 Set,或者传入一个可迭代对象来初始化 Se…...
夜神模拟器无法下载fiddler证书
提示信息: No root certificate was found. Have you enabled HTTPS traffic decryption in Fiddler yet? 在fiddler安装目录运行以下命令: makecert.exe -r -ss my -n "CNDO_NOT_TRUST_FiddlerRoot, ODO_NOT_TRUST, OUCreated by http://www.fidd…...
OpenCV阈值处理详解
文章目录 一、引言二、阈值处理的基本概念2.1 什么是阈值处理?2.2 为什么需要阈值处理? 三、OpenCV中的阈值处理方法3.1 基本阈值处理3.2 阈值类型详解1. 二进制阈值化 (cv2.THRESH_BINARY)2. 反二进制阈值化 (cv2.THRESH_BINARY_INV)3. 截断阈值化 (cv2…...
开源模型应用落地-Qwen2.5-Omni-7B模型-Gradio-部署 “光速” 指南(二)
一、前言 2025年3月,阿里巴巴通义千问团队开源的全模态大模型Qwen2.5-Omni-7B,犹如一记惊雷划破AI领域的长空。这个仅70亿参数的"小巧巨人",以端到端的架构实现了对文本、图像、音频、视频的全模态感知,更通过创新的Thinker-Talker双核架构,将人类"接收-思…...
【仪器仪表专题】案例:信号高电平到底是看顶端值还是最大值?
案例背景 本案例在于审查其他部门信号完整性测试报告中发现的一处有关RS232输入信号质量波形测试问题点。 首先发现测试报告中的RS232时序和信号质量测试中有一个NG项目,如下所示,可以看到T2IN的高电平要求是2.0V~3.6V之间,但是实测是3.8V,超过极限值,所以判定为NG。 …...
Git版本管理系列:(一)使用Git管理单分支
目录 基础概念介绍仓库的创建创建隐藏目录添加代码到暂存区提交代码到仓库提交记录查询比较差异标签文件删除版本回退总结 Git 是一个分布式版本控制系统(DVCS),用于跟踪文件的变更并协调多人协作开发,由 Linus Torvalds 于 2…...
Vue框架的响应式系统
以下是关于 响应式系统 的系统梳理: 一、响应式系统的核心目标 数据驱动视图:自动追踪数据变化并触发视图更新高效依赖追踪:精确识别数据与视图的依赖关系批量异步更新:优化多次数据变更的更新性能组件级更新:最小化DOM操作范围二、核心架构演进 版本核心技术优势局限性Vu…...
【Shell】模拟爬虫下载天龙八部小说
Shell脚本: #curl https://tianlong.5000yan.com/ -o tianlong.html grep "href" tianlong.html | grep html | awk -F"\"" { print $6 } >> urls.txt grep "href" tianlong.html | grep html | awk -F">"…...
WHAT - JavaScript 中 Object.defineProperty() 和 Proxy 对比
目录 一、Object.defineProperty()作用基本语法示例:定义一个只读属性示例:定义 getter/setter 二、Proxy作用基本语法示例:拦截属性访问 对比:defineProperty vs Proxy场景选择建议 在 JavaScript 中,Object.definePr…...
Qt进阶开发:模型/视图原理详解
文章目录 一、模型/视图架构概述二、模型/视图架构的组成部分2.1 模型2.2 视图2.3 委托三、模型类的介绍3.1 模型索引3.2 行和列3.3 父项4.项角色四、视图类的介绍4.1 基本概念4.2 处理项目选择五、委托类的介绍5.1 基本概念5.2 自定义委托六、数据-窗口映射器一、模型/视图架构…...
d202547
目录 一、sql-每月交易 I 二、 sql-按日期分组销售产品 三、sql-列出指定时间段内所有的下单产品 四、 第k个大的数 一、sql-每月交易 I 题目意思就是把国家名称,和年月一样的分为一组,在这组数据中进行计数 题目给的日期格式是yyyy-mm-ss,可以使用l…...
pulsar使用指南
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞…...
底盘---麦克纳姆轮(Mecanum Wheel)
一、基本定义与起源 定义:麦克纳姆轮是一种实现全向移动的特殊轮式结构,通过在主轮周边安装多个倾斜的辊子(小轮),使设备能够在平面上向任意方向移动(包括横向、斜向、旋转等),无需…...
内网文件传输新体验,聊天、传输、自定义,一应俱全
Flix 是一款高效、便捷的跨平台局域网文件传输工具,支持 Windows、macOS、Android、iOS 和 Linux 等多种操作系统。它以简洁直观的聊天式界面为特色,让用户能够像发送消息一样轻松地传输文件,无需复杂的设置或登录。Flix 支持大文件和多种格式…...
深入解析嵌入式Linux系统架构:从Bootloader到用户空间
B站视频链接,请多多关注本人B站: 📌 Yocto项目实战教程:第二章 视频讲解 目录 第2章 Linux系统架构 2.1 GNU/Linux2.2 Bootloader2.3 内核空间2.4 用户空间 总结 第2章 Linux系统架构 {#linux系统架构} 嵌入式Linux系统是Linux内核的精简版…...
一句话,十分钟,一部片!
大家好!我是羊仔,专注AI工具、智能体、编程。 羊仔最近发现一个超有意思的AI工具,简直是为内容创作者量身打造的!啥工具?Story-Flicks! 这玩意儿能干啥呢?简单来说,一句话…...
【橘子大模型】使用streamlit来构建自己的聊天机器人(下)
一、简介 我们之前完成了一个简易的聊天机器人,但是还留下了一些问题没有解决,比如如何开启新的会话。如何切换session_id,如何把对话做成流式的输出。这些我们就会在今天来完成。 二、关于新的会话和session_id from dotenv import load_…...
【合新通信】光纤延迟线(ODL)的原理
光纤延迟线是一种利用光学原理实现信号传输的设备,主要用于雷达、通信和测量等领域。以下是光纤延迟线的基本原理和工作方式: 技术原理 光纤延迟线通过相位控制器和分束器来处理输入信号。具体来说,数据信号和参考信号同时输入分束器&#x…...
Altium Designer——规则设置
规则 间距规则: 线宽:6mil > x > 4mil 1.在菜单栏中选择 设计 ——》 规则 根据下图双击对应的Clearance规则,更改红圈中的数字为6mil,然后点击应用再点击确定。 这个间距是元素之间(走线、铺铜、元器件&#x…...
智谛达科技:以创新为翼,翱翔AI人形机器人蓝海
在科技创新的浩瀚星空中,智谛达科技集团犹如一颗璀璨的明星,以其独特的创新光芒,照亮了AI人形机器人的广阔蓝海。这家在AI领域深耕多年的企业,始终秉持着创新为翼的发展理念,不断突破技术瓶颈,拓展应用场景,以卓越的实力和前瞻性的思维,引领着人形机器人行业的未来发展。 智谛达…...
前后端接口参数详解与 Mock 配置指南【大模型总结】
前后端接口参数详解与 Mock 配置指南 一、前端请求参数类型及 Mock 处理 1.1 URL 路径参数 (Path Parameters) 场景示例: GET /api/users/{userId}/orders/{orderId}Mock.js 处理: Mock.mock(/\/api\/users\/(\d)\/orders\/(\d)/, get, (options) &g…...
RPC与其他通信技术的区别,以及RPC的底层原理
1、什么是 RPC? 远程过程调用(RPC) 是一种协议,它允许程序在不同计算机之间进行通信,让开发者可以像调用本地函数一样发起远程请求。 通过 RPC,开发者无需关注底层网络细节,能够更专注于业务逻…...
汽车售后ODX 和 OTX 详细分析
在汽车售后诊断领域,ODX 和 OTX 都是重要的标准,但它们的应用场景和特点有所不同,难以简单地评判哪个是绝对的主流。以下是对它们的详细分析。 ODX(Open Diagnostic data eXchange) 概述:ODX 是由 ASAM 制…...
深度学习天崩开局
李沐大神的d2l包导入, 这玩意需要python311版本,我现在版本已经313了,作为一个天生要强的男人,我是坚决不向低版本低头的。 然后我就研究啊,各种翻资料啊,然后deepseek加豆包都翻烂了, 最终所…...
面试算法高频04-分治与回溯
分治与回溯 分治和回溯算法,包括其概念、特性、代码模板,并结合具体题目进行讲解,旨在帮助学员理解和掌握这两种算法的应用。 分治与回溯的概念 分治(Divide & Conquer):本质上基于递归,先…...
整数编码 - 华为OD统一考试(A卷、C++)
题目描述 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 编码时7位一组,每个字节的低7位用于存储待编码数字的补码。字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节&…...
对访问者模式的理解
对访问者模式的理解 一、场景二、不采用访问者模式1、代码2、特点 三、采用访问者模式1、代码2、特点 四、思考 一、场景 我们有一个图形系统,系统中有多种图形对象(如圆形、方形等),每种图形对象都有不同的属性和行为。现在需要对…...
第三次PID状态机
以下是 apply_params 函数的实现步骤和代码示例: 1. 定义参数结构体 在头文件中定义 PID_Params 结构体,包含需要动态调整的 PID 参数: // ms_hal_photo_sensor.h typedef struct {float Kp; // 比例系数float Ki; // …...
如何在大型项目中有效使用TypeScript进行类型定义?
嗨,大家好,我是莫循,Typescript是JavaScript的超集,现在已经广泛用于前端开发,那么在项目中如何用好类型定义呢?以下是一些可以提供参考的案例实践。 一、类型组织策略 1. 模块化类型定义 按功能/模块划分…...
C4D XP 粒子动画云端渲染指南
在 C4D 动画制作领域,XP 粒子特效因其复杂的动力学计算常成为渲染瓶颈。传统本地渲染不仅耗时漫长,还需持续占用高配置硬件。而借助专业云渲染平台,创作者可突破物理限制,高效完成 XP 粒子动画的最终输出。 以渲染 101 平台为例&a…...
mysql知识总结 基础篇
Mysql知识总结 1. 执行一条sql语句 期间发生了什么?1. 如何查看mysql服务被多少个客户端链接了2. 空闲链接会一直闲置嘛?3. mysql的链接数量有限制嘛?4. 我们如何知道mysql要使用哪个索引5. 什么是覆盖索引 2. MySQL 一行记录是怎么存储的&am…...
基于条码数据生成校验密码的C++实现方案
前言 在医疗试剂、工业产品等需要严格追踪管理的领域,条码系统常被用于标识产品信息。本文将详细介绍4种用C实现的条码密码生成算法,这些算法可以根据条码前11位数据生成2位校验密码(第9、10位),用于数据校验或简单防…...
前端工具方法整理
文章目录 1.在数组中找到匹配项,然后创建新对象2.对象转JSON字符串3.JSON字符串转JSON对象4.有个响应式对象,然后想清空所有属性5.判断参数不为空6.格式化字符串7.解析数组内容用逗号拼接 1.在数组中找到匹配项,然后创建新对象 const modifi…...
[数据结构]图krusakl算法实现
目录 Kruskal算法 Kruskal算法 我们要在连通图中去找生成树 连通图:在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中任意一对顶点都是连通的,则称此图为连通图。 生成树:一个连通图的最小…...
18-产品经理-跟踪进度
禅道是一个可以帮助产品经理跟踪研发进度的系统。通过禅道,产品经理可以从多个角度了解产品的研发状态。在仪表盘中,可以展示所有产品或单一产品的概况,包括需求、计划和发布数量,研发需求状态,Bug修复率和计划发布数。…...
华为机试—挑7
题目 你需要统计 1 到 n 之间与 7 有关的数字的个数。 与 7 有关的数字包括: 是 7 的倍数(如 7,14,21 等);包含数字 7(如 17,27,37,⋯ ,70,71,72,⋯等)。 示例 输入:20 输出:3 说…...
【区块链安全 | 第三十四篇】合约审计之重入漏洞
文章目录 概念漏洞代码代码审计攻击代码攻击过程总结示例修复建议审计思路 概念 以太坊的智能合约可以互相调用,也就是说,一个合约可以调用另一个合约的函数。除了外部账户,合约本身也可以持有以太币并进行转账。当合约接收到以太币时&#…...
Java虚拟机——JVM(Java Virtual Machine)解析一
1.JVM是什么? 1.1 JVM概念 Java Virtual Machine (JVM) 是JDK的核心组件之一,它使得 Java 程序能够在任何支持 JVM 的设备或操作系统上运行,而无需修改源代码 JDK是什么,JDK和JVM是什么关系?1.Java IDE(Integrated …...
【JVM】question
问题 JVM线程是用户态还是内核态 java线程在jdk1.2之前,是基于名为“绿色线程”的用户线程实现的,这导致绿色线程只能同主线程共享CPU分片,从而无法利用多核CPU的优势。 由于绿色线程和原生线程比起来在使用时有一些限制, jdk1.2…...
页面编辑器CodeMirror初始化不显示行号或文本内容
延迟刷新 本来想延迟100毫秒的,但是会出现样式向左偏移的情况,于是试了试500毫秒,发现就没有问题了,可能是样式什么是需要一个加载过程吧。 useEffect(() > {editorRef.current?.setValue(value || );setTimeout(() > {edi…...
顺序表——C语言实现
目录 一、线性表 二、顺序表 1.实现动态顺序表 SeqList.h SeqList.c Test.c 问题 经验:free 出问题,2种可能性 解决问题 (2)尾删 (3)头插,头删 (4)在 pos 位…...
OpenCV 图形API(21)逐像素操作
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在OpenCV的G-API模块中,逐像素操作指的是对图像中的每个像素单独进行处理的操作。这些操作可以通过G-API的计算图(Graph …...
车载联网终端4G汽车TBOX介绍定义与概述
汽车 TBOX(Telematics Box)是专为汽车设计的远程通信终端设备,属于车联网系统的关键组成部分。车联网系统一般包含主机、汽车 T - BOX、手机 APP 及后台系统。融合了车身网络和 4G 无线通信技术,为汽车提供丰富的 Telematics 服务…...
CentOS无法安装Vim文本编辑器问题以及解决方法
1.问题一:用户权限不够 解决方法一:切换到root用户 解决方法二:给本用户添加权限 2.问题二:镜像源问题:官方镜像源可能已经失效 解决方法: 1. 检查网络连接 2. 检查和配置 DNS 3. 更换镜像源&#…...