当前位置: 首页 > news >正文

数据库为什么使用B+树而不是B树做索引

在这里插入图片描述

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。
🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。
🏆本文已收录于PHP专栏:MySQL的100个知识点。
🎉欢迎 👍点赞✍评论⭐收藏

文章目录

    • 介绍
    • B树的特点
    • B+树的特点
    • 数据库为什么使用B+树而不是B树做索引


介绍

B树和B+树是数据库索引结构中常用的两种树型数据结构。它们相似但又有一些不同之处,本文将分别介绍B树和B+树的特点,并解释为什么数据库更倾向于使用B+树而不是B树来做索引。

在这里插入图片描述

B树的特点

B树是一种平衡多路搜索树,适用于磁盘等外存储设备。它具有以下特点:

  1. 多路搜索:B树的每个节点可以存储多个关键字和对应的指针,这使得B树能够同时处理大量的关键字。
  2. 平衡性:B树的所有叶子节点都在同一层级上,树的高度相对较小,保证了查询的效率并减少了磁盘I/O的次数。
  3. 自动调整:当插入或删除关键字时,B树会自动进行调整以保持平衡状态,从而提高维护性能。
  4. 无需全树搜索:由于B树的平衡性,可以通过比较少量的节点来定位目标关键字,而不需要搜索整棵树,这大大提高了查询效率。

下面是一个示例的B树结构:

               10/    \5       20/ \     /   \3    7   15    30

B+树的特点

B+树是在B树的基础上进行了优化,也是一种常用的索引结构。它与B树相比有以下特点:

  1. 更适合磁盘预读:B+树的内部节点只存储关键字信息,而将真正的数据存储在叶子节点中。这样使得每个节点可以存储更多的关键字,提高查询效率和磁盘预读能力。
  2. 顺序访问性良好:由于叶子节点之间采用链表连接,可以按照顺序遍历叶子节点,提高区间查询的性能。
  3. 更适合范围查询:由于叶子节点之间的顺序性,B+树更适合进行范围查询操作,比如BETWEENORDER BY等操作。

下面是一个示例的B+树结构:

               10/    \5       20/ \     /   \3--7   15--30

数据库为什么使用B+树而不是B树做索引

尽管B树和B+树都是有效的索引结构,但数据库更倾向于使用B+树来做索引。原因如下:

  1. 更高的查询效率:由于B+树在磁盘预读方面的优势,相对于B树,在同样的节点数和磁盘I/O次数下,可以提供更高的查询效率。
  2. 更适合范围查询:数据库中常见的范围查询操作,如BETWEENORDER BY等操作,在B+树中执行更快。而在B树中,可能需要反复进行I/O操作才能获取到完整的结果集。
  3. 更好的顺序访问性:B+树的叶子节点之间采用链表连接,可以按照顺序遍历叶子节点,提高区间查询的性能。而B树则无法直接进行顺序遍历。
  4. 更适合磁盘存储:数据库通常需要将数据存储到磁盘上,而不是内存中。B+树将数据存储在叶子节点中,减少了树的高度,可以更有效地利用磁盘预读,降低磁盘I/O次数。

综上所述,B+树在查询效率、范围查询、顺序访问性和磁盘存储方面都具有明显的优势,因此数据库更倾向于使用B+树做索引。

下面是一个示例的SQL语句,展示了如何在数据库中创建一个B+树索引:

CREATE INDEX idx_name ON table_name (column_name);

该语句将在名为table_name的表中,为名为column_name的列创建一个名为idx_name的B+树索引。这样,就可以通过该列来提高查询效率和范围查询性能。

相关文章:

数据库为什么使用B+树而不是B树做索引

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…...

java必知必会--面向对象及相关基础知识

java必知必会–面向对象及相关基础知识 一、java面向对象: 1、什么是面向对象以及三大特性 ①我们把数据和数据之间的相互操作关系放到一起总结为–对象。所有的操作都是基于对象来进行的。 ②面向对象的的特征:封装、继承、多态 ③封装:我…...

【推荐】Spring与Mybatis集成

目录 1.概述 2.集成 2.1代码演示: 3.整合 3.1概述 3.2 进行整合分页 接着上两篇,我已经写了Mybatis动态之灵活使用,mybatis的分页和特殊字符的使用方式接下来把它们集成起来,是如何的呢👇👇&#x1…...

中科驭数受邀在招商银行金融科技论坛作异构计算主题分享 解码金融科技先进算力构建之路

8月25日,2023招银浦江金融科技论坛正式召开。中科驭数高级副总裁张宇受邀在资管科技分论坛发表《金融行业先进异构算力底座构建之路》的主题演讲,与参会嘉宾分享了当前计算系统的发展趋势以及如何通过异构算力构建IT技术底座来推动金融科技的创新。 ▲ 中…...

Maven打包方式pom和jar和war的区别

Maven 项目可以使用不同的打包方式,如 POM、JAR 和 WAR,这些方式决定了项目构建后生成的产物类型和用途。下面是这些打包方式的区别: 1. **POM (Project Object Model):** POM 打包方式实际上不会生成一个可执行的构建产物。它是…...

【51单片机】EEPROM-IIC实验(按键控制数码管)

目录 🎁I2C总线 ​编辑 🎁代码 🏳️‍🌈main.c 🏳️‍🌈i2.c 🎆代码分析 🎁I2C总线 I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距…...

【java】【springboot】【idea】springboot项目pom.xml 灰色下划线

解决方案: 这里我们找到了原因,就是因为选择了Ignored Files导致pom.xml文件被设置在maven忽略文件清单中,所以我们将打勾的选项取消,点击Apply,然后点击OK...

[JavaWeb]【十四】web后端开发-MAVEN高级

目录 一、分模块设计与开发 1.1 分模块设计 1.2 分模块设计-实践​编辑 1.2.1 复制老项目改为spring-boot-management 1.2.2 新建maven模块runa-pojo 1.2.2.1 将原项目pojo复制到runa-pojo模块 1.2.2.2 runa-pojo引入新依赖 1.2.2.3 删除原项目pojo包 1.2.2.4 在spring-…...

浏览器跨域

生活中的事跟跨域有什么关系,那必须有。 跨域的产生是浏览器的安全机制引起的,只有在使用Ajax时才会发生。简单来说就是你可以通过ajax发送请求,但要看远程服务器脸色,他没授权,浏览器这个老六就给拦截了,不…...

ffmpeg windows环境MinGW+msys2编译so库

一、安装MinGW 1.1、下载MinGW 1.2、下载完成后,会得到一个名为 mingw-get-setup.exe 的安装包,双击打开它,可以看到如下的对话框: 1.3、直接点击“Install”,进入下面的对话框 1.4、可根据自己操作系统的实际情况&am…...

python VTK PyQt5 VTK环境搭建 创建 渲染窗口及三维模型,包含 三维模型交互;

目录 Part1. VTK 介绍 Part2. PyQt5 VTK环境搭建 安装Anaconda 自带Python Anaconda下载 安装PyQt5 安装 VTK Part3 :PyQt VTK 结合样例: Part1. VTK 介绍 VTK(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形…...

学习总结(二) node.js服务器如何使用net模块向硬件发送命令与接收数据?

服务器server.js: const net require("net"); //此模块用于tcp/ip通讯 当收到get请求时: server.get("/cfjcApi/v1/SkyTempHudi", (req, res) > { let client new net.Socket(); client.connect(网络模块端口, 网络模块Ip, () > { //此模块…...

rust工程

文章目录 CargomacOS配置rust环境vscode配置 目录结构Cargo.tomlcargo命令hello world 跟web交互WebAssembly 跟Android交互配置Android环境JNI例子NDK例子 Rust 是一种现代的、系统级的编程语言,它强调并发安全、内存安全和高性能。Rust 的设计目标是提供一种有着良…...

Java并发工具类

JDK并发包中常用并发工具类: CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段; Exchanger工具类则提供了在线程间交换数据的一种手段。 等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成…...

晨控CK-GW208与三菱L系列PLC以TCP通讯手册

晨控CK-GW208是一款支持标准工业以太网协议的IO-LINK主站网关,方便用户快速便捷的集成到 PLC 等控制系统中。 CK-GW208主站网关集成 8 路 IO-LINK 通信端口,采用即插即用模式,无需繁琐的配置,减轻现场安装调试的工作量。为了满足…...

c++11 标准模板(STL)(std::basic_istringstream)(五)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_istringstream;(C11 前)template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allo…...

【案例教程】高分论文密码:大尺度空间模拟预测与数字制图

尺度空间模拟预测和数字制图技术和不确定性分析广泛应用于高分SCI论文之中&#xff0c;号称高分论文密码。大尺度模拟技术可以从不同时空尺度阐明农业生态环境领域的内在机理和时空变化规律&#xff0c;又可以为复杂的机理过程模型大尺度模拟提供技术基础。在本次培训中&#x…...

uniapp 自定义手机顶部状态栏(适配状态栏高度)

开启页面自定义导航栏功能 uniapp 在 pages.json 页面设置了全局的 globalStyle 的 "navigationStyle": "custom" 或单页面的 style 的 "navigationStyle": "custom" 之后页面顶部就没有自带的导航栏了&#xff0c;这时用户可自定义该…...

【LeetCode】1448.统计二叉树中好节点的数目

题目 给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,3,null,1,5] 输出&#xff1a;4 …...

C语言基础之——数组

前言&#xff1a;本篇文章&#xff0c;我们将对一维数组&#xff0c;和二维数组进行展开式的讲解&#xff0c;并进行实际应用。 目录 一.一维数组 1.一维数组的创建和初始化 &#xff08;1&#xff09;数组的创建 &#xff08;2&#xff09;数组的初始化 2.一维数组的使用…...

告别死记硬背!用Python+NumPy图解机器学习中的矩阵求导(附常见公式速查表)

告别死记硬背&#xff01;用PythonNumPy图解机器学习中的矩阵求导&#xff08;附常见公式速查表&#xff09; 在机器学习和深度学习的实践中&#xff0c;矩阵求导是理解反向传播、优化算法等核心概念的关键数学工具。然而&#xff0c;传统的数学教材往往以抽象符号和理论推导为…...

别再浪费主板上的PCIE插槽了!手把手教你用VL805芯片打造高速USB3.0扩展坞

释放主板潜能&#xff1a;基于VL805芯片的USB3.0扩展方案实战指南 当你的工作台摆满外设却苦于主板接口不足时&#xff0c;那些闲置的PCIE插槽正等待被唤醒。本文将从芯片选型到性能调优&#xff0c;完整呈现如何将一块VL805-QFN68芯片转化为高性能USB3.0扩展方案。 1. 硬件选型…...

芯片与封装热协同设计:当“先进制程”遇上“散热墙”

&#x1f393;作者简介&#xff1a;科技自媒体优质创作者 &#x1f310;个人主页&#xff1a;莱歌数字-CSDN博客 211、985硕士&#xff0c;从业16年 从事结构设计、热设计、售前、产品设计、项目管理等工作&#xff0c;涉足消费电子、新能源、医疗设备、制药信息化、核工业等…...

VS Code 迎来史诗级更新:全新 Agents 窗口发布

VS Code 在前几年古法编程时代&#xff0c;那就是 IDE 的王者。随着 AI Coding 的不断进步。虽然 VS Code 依托 github copilot 早早的就集成了 AI Coding 的能力。但是由于 VSCode 本身是一个 IDE &#xff0c;它的核心能力还是文本编辑器。但是在 Claude&#xff0c; xcode 等…...

ImageToSTL:将二维图片转化为可打印三维模型的艺术

ImageToSTL&#xff1a;将二维图片转化为可打印三维模型的艺术 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left side. 项…...

LRC歌词制作终极指南:轻松创建专业级同步歌词的免费工具

LRC歌词制作终极指南&#xff1a;轻松创建专业级同步歌词的免费工具 【免费下载链接】lrc-maker 歌词滚动姬&#xff5c;可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 你是否曾经在听歌时想要制作属于自己的歌词文件…...

如何快速掌握Wallpaper Engine资源处理工具:面向初学者的完整指南

如何快速掌握Wallpaper Engine资源处理工具&#xff1a;面向初学者的完整指南 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 你是否曾经遇到过想要修改Wallpaper Engine动态壁纸&a…...

无王无帝定乾坤,来自田间第一人 大道济世安苍生

无王无帝定乾坤来自田间第一人 一、执念 千秋岁月轮转&#xff0c;历朝治乱兴衰&#xff0c;世人始终困于一个执念&#xff1a;天下安定&#xff0c;必靠帝王君临、强权统御。可纵观古今世道&#xff0c;王权更迭往复&#xff0c;霸业起落无常&#xff0c;真正能长久安社稷、润…...

RT-Thread Studio 2.x 保姆级教程:从新建工程到线程控制LED,新手避坑指南

RT-Thread Studio 2.2实战指南&#xff1a;从零构建线程控制LED的完整路径 第一次打开RT-Thread Studio 2.2时&#xff0c;那个现代化的深色界面确实让人眼前一亮&#xff0c;但随之而来的是一连串的疑问&#xff1a;如何为我的STM32F103C8T6开发板创建项目&#xff1f;线程和裸…...

剪流AI事业大使是不是割韭菜?深度解析其真实运作细节与收益模型

近年来&#xff0c;“AI事业大使”成为一个热门话题&#xff0c;尤其是剪流AI推出的相关计划&#xff0c;引发了广泛讨论。其中&#xff0c;“AI事业大使是不是割韭菜”是许多观望者心中的核心疑问。本文将基于其公开的运作细节与权益体系&#xff0c;进行客观、深度的解析&…...