一文彻底搞懂MySQL基础:B树和B+树的区别(简洁版)

文章目录

      • 1. 节点结构
      • 2. 插入和删除
      • 3. 查询
      • 4. 性能
      • 5. 适用场景
      • 6.关于 B树和 B+树的常见问题
        • 6.1. B树和B+树的区别是什么?
        • 6.2. 什么情况下应该使用 B树?
        • 6.3. 什么情况下应该使用 B+树?

B树和B+树都是多路搜索树,它们都用于数据库索引中存储和组织数据。B+树是B树的一种改进,它具有更好的插入和删除性能。

1. 节点结构

B+树叶节点两两相连可大大增加区间访问性,可使用在范围查询等,而B树每个节点 key 和 data 在一起,无法区间查找。

B树:每个节点存储多个关键字和数据指针,关键字之间通过指针连接。
在这里插入图片描述
查询节点 key 为 50 的 data,key 为 50 的节点在第一层,B-树只需要一次磁盘 IO 即可完成查找。所以说B-树的查询最好时间复杂度是 O(1)。

B+树:非叶子节点只存储关键字和子节点指针,叶子节点存储关键字和数据。
在这里插入图片描述
B+树所有的 data 域都在根节点,查询 key 为 50的节点必须从根节点索引到叶节点,时间复杂度固定为 O(log n)。

B树的由于每个节点都有key和data,所以查询的时候可能不需要O(logn)的复杂度,甚至最好的情况是O(1)就可以找到数据,而B+树由于只有叶子节点保存了data,所以必须经历O(logn)复杂度才能找到数据

2. 插入和删除

B树:插入和删除操作需要在树中找到要插入或删除的关键字,然后进行相应的操作。如果树满了,需要进行分裂操作。
B+树:插入操作总是从叶子节点开始,如果叶子节点满了,则进行分裂操作。删除操作需要从叶子节点开始,如果删除后叶子节点不满足最小度,则进行合并操作。

3. 查询

B树:查询操作需要从根节点开始,逐层向下查找,直到找到要查询的关键字。
B+树:查询操作只需要从根节点开始,逐层向下查找,直到找到要查询的关键字所在的叶子节点。

4. 性能

B树:B树的插入和删除操作的性能较差,因为需要进行分裂或合并操作。
B+树:B+树的插入和删除操作的性能较好,因为只需要在叶子节点进行操作。

5. 适用场景

B树:B树适用于对插入和删除操作要求不高的场景。
B+树:B+树适用于对插入和删除操作要求较高的场景。

B树和B+树都是多路搜索树,它们都用于在数据库索引中存储和组织数据。

6.关于 B树和 B+树的常见问题

6.1. B树和B+树的区别是什么?

B树和B+树的主要区别在于节点结构和插入和删除操作。B树的每个节点都存储关键字和数据指针,而B+树的非叶子节点只存储关键字和子节点指针。B树的插入和删除操作需要在树中找到要插入或删除的关键字,然后进行相应的操作,而B+树的插入操作总是从叶子节点开始,删除操作需要从叶子节点开始。

6.2. 什么情况下应该使用 B树?

B树适用于对插入和删除操作要求不高的场景。例如,可以用于存储用户列表、缓存数据等。

6.3. 什么情况下应该使用 B+树?

B+树适用于对插入和删除操作要求较高的场景。例如,可以用于实现数据库索引。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/667344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT自用,勿点

自己有接近2年的前端经验(html,js,jq,vue之类的),但是一直对QT不是很熟悉,之前零散的学了一些,但是平时不怎么做界面,这几天系统的学一下。 1.7 创建第一个Qt项目_哔哩哔哩_bilibili 文档: *Qt中的信号槽…

命令注入漏洞原理以及修复方法

漏洞名称 :命令注入 漏洞描述:Command Injection,即命令注入攻击,是指由于Web应用程序对用户提交的数据过滤 不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至Web应用程序中,并利…

一文讲明Jetpack中的图片组件

Jetpack Compose系列(5) - 图片组件 Jetpack Compose中的常用图片组件有两个:Icon和Image。从命名上就不难看出这两个组件在内容呈现上就是负责图形和图片相关。 需要说明的是,Compose获取资源方式有四种: 文本 -> stringResource(R.s…

C# 从“byte[]”转换为“BitmapImage”

要从字节数组 (byte[]) 转换为 System.Windows.Media.Imaging.BitmapImage,你需要使用一个内存流 (MemoryStream) 来读取字节数组,并利用这个流来初始化 BitmapImage。以下是如何执行这一转换的详细步骤和代码示例: 将字节数组转换为 Bitmap…

比特币ETF广告战大爆发!

作者:秦晋 贝莱德主动发起广告攻势。 2月1日,据外媒Cryptoslate报道,贝莱德在提交给美国SEC的一份文件中显示,其提出一项在建筑物侧面投影比特币ETF广告计划。 据介绍,广告内容为:「IBIT」信号是一个以迈阿…

【Qt+MSVC2017_64bit +Cmake新建项目编译出错】

项目场景: 提示:这里简述项目相关背景: 项目新电脑环境配置 QtMSVC2017_64bit Cmake新建项目编译出错 问题描述 提示:这里描述项目中遇到的问题: QtMSVC2017_64bit Cmake新建项目编译出错 Running C:\Program Fil…

【数据分享】1米分辨率土地覆盖数据集SinoLC-1

数据链接 SinoLC-1: the first 1-meter resolution national-scale land-cover map of China created with the deep learning framework and open-access data (Update data: August, 2023) (zenodo.org)https://zenodo.org/records/8214467 数据分享 数据分享到了公众号&…

Android studio改代码运行不生效

Android studio改代码后运行不生效,尝试卸载apk后,运行能生效,后面尝试手动通过adb命令安装生成的apk能生效。 studio 版本 解决方案: 在File->Settings->Build, Execution, Deployment,找到Android Configura…

BFS——双向广搜+A—star

有时候从一个点能扩展出来的情况很多,这样几层之后搜索空间就很大了,我们采用从两端同时进行搜索的策略,压缩搜索空间。 190. 字串变换(190. 字串变换 - AcWing题库) 思路:这题因为变化规则很多,所以我们一层一层往外…

golang开源的可嵌入应用程序高性能的MQTT服务

golang开源的可嵌入应用程序高性能的MQTT服务 什么是MQTT? MQTT(Message Queuing Telemetry Transport)是一种轻量级的、开放的消息传输协议,设计用于在低带宽、高延迟或不可靠的网络环境中进行通信。MQTT最初由IBM开发&#xf…

canvas设置图形各种混合模式,类似photoshop效果

查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

一看就会《幻兽帕鲁》服务器自建指南

玩转幻兽帕鲁服务器,阿里云推出新手0基础一键部署幻兽帕鲁服务器教程,傻瓜式一键部署,3分钟即可成功创建一台Palworld专属服务器,成本仅需26元,阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

jmeter设置定时器

前言 本文主要分享两种定时器(同步定时器、固定定时器)的用法,从作用,设置方法以及实例演示几个方面讲解,结尾还有小知识哦!一起开始学习吧! 一、同步定时器(集合点) …

DFS剪枝算法经典题目-挑选

4954. 挑选 - AcWing题库 给定一个包含 n 个正整数 a1,a2,…,an的集合。 集合中可能存在数值相同的元素。 请你从集合中挑选一些元素,要求同时满足以下所有条件: 被选中元素不少于 2 个。所有被选中元素之和不小于 l 且不大于 r。所有被选中元素之中最大…

Leetcode 3030. Find the Grid of Region Average

Leetcode 3030. Find the Grid of Region Average 1. 解题思路2. 代码实现 题目链接:3030. Find the Grid of Region Average 1. 解题思路 这一题我的思路上也没啥巧妙的,就是大力出奇迹,直接就是遍历所有3x3的区间,找到左右的…

Qt 项目树工程,拷贝子项目dll到子项目exe运行路径

1、项目树工程 2、项目树列表 ---- BuildAll -------- App (exe) -------- Database (dll) 注:使用 子项目–>添加库–>内部库 的方式 3、qmake 内置的变量 $$OUT_PWD 表示输出文件(如可执行文件…

[leetcode] 22. 括号生成

文章目录 题目描述解题方法方法一:dfs遍历java代码 方法二:按照卡特兰数的思路递归求出有效括号组合java代码 相似题目 题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示…

Nginx 介绍和使用

Nginx 介绍和使用 一、Nginx简介 Nginx是一款高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它具有轻量级、高并发处理能力、低资源消耗等优点,常被用于Web服务器、反向代理和负载均衡。Nginx通过事件驱动的方式进行设计&#xff0…

SQL注入其他方法

此次实验因为环境问题很多无法复现,在此只讨论过程和方法 一、SQL注入之outfile注入 mysql的outfile的作用是导出文件,使用此方法的必要条件:(此方法成功率极低) 1、知道目标网站的物理路径; 2、%secur…