mysql使用B+树

mysql为什么要使用B+树作为索引 1 概述 大家可能在面试的时候都会被问到这样一个问题:mysql的索引结构是什么?这个时候了解的都知道是B+树,那么为什么会采用B+树作为它的索引结构呢? 由图可以知道:索引的存在时为了加快数据访问提高查询效率的,而数据存储在磁盘中,但从磁盘读取数据会产生大量的IO操作,读取效率是非常低的。所以在读取的时候要减少io量和减少io次数来提高读取效率。 ... 阅读详情

概述

首先需要澄清的一点是,MySQL 跟 B+ 树没有直接的关系,真正与 B+ 树有关系的是 MySQL 的默认存储引擎 InnoDB,MySQL 中存储引擎的主要作用是负责数据的存储和提取,除了 InnoDB 之外,MySQL 中也支持 MyISAM 作为表的底层存储引擎。

在这里插入图片描述
我们在使用 SQL 语句创建表时就可以为当前表指定使用的存储引擎,你能在 MySQL 的文档 Alternative Storage Engines 中找到它支持的全部存储引擎,例如:MyISAM、CSV、MEMORY等,然而默认情况下,使用如下所示的 SQL 语句来创建表就会得到 InnoDB 存储引擎支撑的表:

CREATE TABLE t1 (
    a INT,
    b CHAR (20
), PRIMARY KEY (a)) ENGINE=InnoDB;

我们今天最终将要分析的问题其实还是,为什么 MySQL 默认的存储引擎 InnoDB 会使用 MySQL 来存储数据,相信对 MySQL 稍微有些了解的人都知道,无论是表中的数据(主键索引)还是辅助索引最终都会使用 B+ 树来存储数据,其中前者在表中会以<id, row>的方式存储,而后者会以<index, id>的方式进行存储,这其实也比较好理解:

在主键索引中,id是主键,我们能够通过id找到该行的全部列;
在辅助索引中,索引中的几个列构成了键,我们能够通过索引中的列找到id,如果有需要的话,可以再通过id找到当前数据行的全部内容;
对于 InnoDB 来说,所有的数据都是以键值对的方式存储的,主键索引和辅助索引在存储数据时会将id和index作为键,将所有列和id作为键对应的值。在这里插入图片描述

在具体分析 InnoDB 使用 B+ 树背后的原因之前,我们需要为 B+ 树找几个『假想敌』,因为如果我们只有一个选择,那么选择 B+ 树也并不值得讨论,找到的两个假想敌就是 B 树和哈希,相信这也是很多人会在面试中真实遇到的问题,我们就以这两种数据结构为例,分析比较 B+ 树的优点。

设计

到了这里我们已经明确了今天待讨论的问题,也就是为什么 MySQL 的 InnoDB 存储引擎会选择 B+ 树作为底层的数据结构,而不选择 B 树或者哈希?在这一节中,我们将通过以下的两个方面介绍 InnoDB 这样选择的原因。

InnoDB 需要支持的场景和功能需要在特定查询上拥有较强的性能;
CPU 将磁盘上的数据加载到内存中需要花费大量的时间,这使得 B+ 树成为了非常好的选择;
数据的持久化以及持久化数据的查询其实是一个常见的需求,而数据的持久化就需要我们与磁盘、内存和 CPU 打交道;MySQL 作为 OLTP 的数据库不仅需要具备事务的处理能力,而且要保证数据的持久化并且能够有一定的实时数据查询能力,这些需求共同决定了 B+ 树的选择,接下来我们会详细分析上述两个原因背后的逻辑。

读写性能

很多人对 OLTP 这个词可能不是特别了解,我们帮助各位读者快速理解一下,与 OLTP 相比的还有 OLAP,它们分别是 Online Transaction Processing 和 Online Analytical Processing,从这两个名字中我们就可以看出,前者指的就是传统的关系型数据库,主要用于处理基本的、日常的事务处理,而后者主要在数据仓库中使用,用于支持一些复杂的分析和决策。
在这里插入图片描述

作为支撑 OLTP 数据库的存储引擎,我们经常会使用 InnoDB 完成以下的一些工作:

  • 通过INSERT、UPDATE和DELETE语句对表中的数据进行增加、修改和删除;
  • 通过UPDATE和DELETE语句对符合条件的数据进行批量的删除;
  • 通过SELECT语句和主键查询某条记录的全部列;
  • 通过SELECT语句在表中查询符合某些条件的记录并根据某些字段排序;
  • 通过SELECT语句查询表中数据的行数;
  • 通过唯一索引保证表中某个字段或者某几个字段的唯一性;

如果我们使用 B+ 树作为底层的数据结构,那么所有只会访问或者修改一条数据的 SQL 的时间复杂度都是O(log n),也就是树的高度,但是使用哈希却有可能达到O(1)的时间复杂度,看起来是不是特别的美好。但是当我们使用如下所示的 SQL 时,哈希的表现就不会这么好了:

SELECT * FROM posts WHERE author = 'draven' ORDER BY created_at DESC
SELECT * FROM posts WHERE comments_count > 10
UPDATE posts SET github = 'github.com/draveness' WHERE author = 'draven'
DELETE FROM posts WHERE author = 'draven'

如果我们使用哈希作为底层的数据结构,遇到上述的场景时,使用哈希构成的主键索引或者辅助索引可能就没有办法快速处理了,它对于处理范围查询或者排序性能会非常差,只能进行全表扫描并依次判断是否满足条件。全表扫描对于数据库来说是一个非常糟糕的结果,这其实也就意味着我们使用的数据结构对于这些查询没有其他任何效果,最终的性能可能都不如从日志中顺序进行匹配。

在这里插入图片描述

使用 B+ 树其实能够保证数据按照键的顺序进行存储,也就是相邻的所有数据其实都是按照自然顺序排列的,使用哈希却无法达到这样的效果,因为哈希函数的目的就是让数据尽可能被分散到不同的桶中进行存储,所以在遇到可能存在相同键author = 'draven或者排序以及范围查询comments_count > 10时,由哈希作为底层数据结构的表可能就会面对数据库查询的噩梦 —— 全表扫描。

B 树和 B+ 树在数据结构上其实有一些类似,它们都可以按照某些顺序对索引中的内容进行遍历,对于排序和范围查询等操作,B 树和 B+ 树相比于哈希会带来更好的性能,当然如果索引建立不够好或者 SQL 查询非常复杂,依然会导致全表扫描。

与 B 树和 B+ 树相比,哈希作为底层的数据结构的表能够以O(1)的速度处理单个数据行的增删改查,但是面对范围查询或者排序时就会导致全表扫描的结果,而 B 树和 B+ 树虽然在单数据行的增删查改上需要O(log n)的时间,但是它会将索引列相近的数据按顺序存储,所以能够避免全表扫描。

数据加载

既然使用哈希无法应对我们常见的 SQL 中排序和范围查询等操作,而 B 树和 B 树和 B+ 树都可以相对高效地执行这些查询,那么为什么我们不选择 B 树呢?这个原因其实非常简单 —— 计算机在读写文件时会以页为单位将数据加载到内存中。页的大小可能会根据操作系统的不同而发生变化,不过在大多数的操作系统中,页的大小都是4KB,你可以通过如下的命令获取操作系统上的页大小:

$ getconf PAGE_SIZE
4096

当我们需要在数据库中查询数据时,CPU 会发现当前数据位于磁盘而不是内存中,这时就会触发 I/O 操作将数据加载到内存中进行访问,数据的加载都是以页的维度进行加载的,然而将数据从磁盘读取到内存中所需要的成本是非常大的,普通磁盘(非 SSD)加载数据需要经过队列、寻道、旋转以及传输的这些过程,大概要花费10ms左右的时间。
在这里插入图片描述

我们在估算 MySQL 的查询时就可以使用10ms这个数量级对随机 I/O 占用的时间进行估算,这里想要说的是随机 I/O 对于 MySQL 的查询性能影响会非常大,而顺序读取磁盘中的数据时速度可以达到 40MB/s,这两者的性能差距有几个数量级,由此我们也应该尽量减少随机 I/O 的次数,这样才能提高性能。

B 树与 B+ 树的最大区别就是,B 树可以在非叶结点中存储数据,但是 B+ 树的所有数据其实都存储在叶子节点中,当一个表底层的数据结构是 B 树时,假设我们需要访问所有『大于 4,并且小于 9 的数据』:
在这里插入图片描述

如果不考虑任何优化,在上面的简单 B 树中我们需要进行 4 次磁盘的随机 I/O 才能找到所有满足条件的数据行:

  1. 加载根节点所在的页,发现根节点的第一个元素是 6,大于 4;
  2. 通过根节点的指针加载左子节点所在的页,遍历页面中的数据,找到 5;
  3. 重新加载根节点所在的页,发现根节点不包含第二个元素;
  4. 通过根节点的指针加载右子节点所在的页,遍历页面中的数据,找到 7 和 8;
    当然我们可以通过各种方式来对上述的过程进行优化,不过 B 树能做的优化 B+ 树基本都可以,所以我们不需要考虑优化 B 树而带来的收益,直接来看看什么样的优化 B+ 树可以做,而 B 树不行。

由于所有的节点都可能包含目标数据,我们总是要从根节点向下遍历子树查找满足条件的数据行,这个特点带来了大量的随机 I/O,也是 B 树最大的性能问题。

B+ 树中就不存在这个问题了,因为所有的数据行都存储在叶节点中,而这些叶节点可以通过『指针』依次按顺序连接,当我们在如下所示的 B+ 树遍历数据时可以直接在多个子节点之间进行跳转,这样能够节省大量的磁盘 I/O 时间,也不需要在不同层级的节点之间对数据进行拼接和排序;通过一个 B+ 树最左侧的叶子节点,我们可以像链表一样遍历整个树中的全部数据,我们也可以引入双向链表保证倒序遍历时的性能
在这里插入图片描述
有些读者可能会认为使用 B+ 树这种数据结构会增加树的高度从而增加整体的耗时,然而高度为 3 的 B+ 树就能够存储千万级别的数据,实践中 B+ 树的高度最多也就 4 或者 5,所以这并不是影响性能的根本问题。

总结

任何不考虑应用场景的设计都不是最好的设计,当我们明确的定义了使用 MySQL 时的常见查询需求并理解场景之后,再对不同的数据结构进行选择就成了理所当然的事情,当然 B+ 树可能无法对所有 OLTP 场景下的查询都有着较好的性能,但是它能够解决大多数的问题。

我们在这里重新回顾一下 MySQL 默认的存储引擎选择 B+ 树而不是哈希或者 B 树的原因:

  • 哈希虽然能够提供O(1)的单数据行操作性能,但是对于范围查询和排序却无法很好地支持,最终导致全表扫描;
  • B 树能够在非叶节点中存储数据,但是这也导致在查询连续数据时可能会带来更多的随机 I/O,而 B+ 树的所有叶节点可以通过指针相互连接,能够减少顺序遍历时产生的额外随机 I/O;
    如果想要追求各方面的极致性能也不是没有可能,只是会带来更高的复杂度,我们可以为一张表同时建 B+ 树和哈希构成的存储结构,这样不同类型的查询就可以选择相对更快的数据结构,但是会导致更新和删除时需要操作多份数据。

从今天的角度来看,B+ 树可能不是 InnoDB 的最优选择,但是它一定是能够满足当时设计场景的需要,从 B+ 树作为数据库底层的存储结构到今天已经过了几十年的时间,我们不得不说优秀的工程设计确实有足够的生命力。而我们作为工程师,在选择数据库时也应该非常清楚地知道不同数据库适合的场景,因为软件工程中没有银弹。

Mysql索引结构全维度比较 前言 在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么选择B+树作为索引结构。 一、二叉查找树(BST):不平衡 二叉查找树(BST,Binary Search Tree),也叫二叉排序树,在二叉树的基础上需要满足:任意节点的左子树上所有节... 阅读详情

相关推荐

MySQL的b+树

【MySQL的b+树】

学无止境 963

MySQL索引-B+树(讲得通透)

索引这个词,相信大多数人已经相当熟悉了,很多人都知道MySQL的索引主要以B+树为主,但是要问到为什么用B+树,恐怕很少有人能把前因后果讲述的很完整。本文就来从头到尾介绍下数据库的索引。 索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在[1,2,3,4]中找到4这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。索引在mysql数据库中分三类: B+树索引、Hash索引、全..

尽量致力于发表微服务、中间件和算法等原创作品。 1万+

告别地图偏移!手把手教你用MapOnline V1.2在ArcGIS里加载无偏谷歌影像和历史影像

本文详细介绍了如何使用MapOnline V1.2插件在ArcGIS中加载无偏谷歌影像和历史影像,解决GIS工程师长期面临的地图偏移问题。通过三步安装配置、无偏影像加载和时空分析功能,提升地理信息数据的精确度和工作效率,特别适用于城市规划、环境监测等场景。

weixin_29252171的博客 232

MySQL索引底层:B+树详解

如果插入关键字后,叶子节点当前含有的关键字数目等于阶数m,则插,该节点开始 「分裂」为两个新的节点,一个节点包含m/2 个关键字,另外一个关键字包含m/2个关键值。最后插入28,发现当前节点关键字也是不小于阶数4了,于是分裂,于是分裂, 第 4/2=2个,也就是36上移到父节点,因父子节点只有2个关键值,还是小于4的,所以不用继续分裂,插入完成。找到包含关键值的结点,如果关键字个数大于m/2-1,并且关键值是当前节点的最大(小)值,并且该关键值存在父子节点中,那么删除该关键字,同时需要相应调整父节点的值。

weixin_44837153的博客 3297

【机器视觉】Halcon 最新版本安装教程(HALCON 24.11.1.1 Progress-Steady)

注:如果使用评估版本,下载前先了解最新评估授权密钥所支持的版本。。近几年不同版本安装过程类似,均可参考本教程。

OpenSeek的博客 3万+

保姆级教程:用CameraX API快速搞定Android多摄像头切换与预览(附避坑指南)

本文提供了一份详细的CameraX API教程,帮助开发者快速实现Android多摄像头切换与预览功能。通过简化API设计和生命周期感知能力,CameraX大幅降低了开发复杂度,同时解决了多摄像头兼容性、预览优化等常见问题。文章包含完整代码示例和实战避坑指南,特别适合需要高效集成相机功能的Android开发者。

weixin_42699679的博客 167

Mysql B+树

①介绍一下 B tree, 多路平衡查找树(balance tree) 通过名称多路平衡就知道这个树的特点,是平衡二叉树的基础上改进的多路(支持多个分叉)。 所有的叶子节点在同一高度,非叶子节点也会存放数据。 假设要从上图中查找id = X的数据,B TREE 搜索过程如下: 取出根磁盘块,加载40和60两个关键字。 如果X等于40,则命中;如果X小于40走P1;如果40 < X < 60走P2;如果X = 60,则命中;如果X > 60走P3。 根据以上规则命中后,接

u010648194的博客 8694

cadence capture CIS 之使用access创建数据库(.mdb)

cadence capture CIS 之使用access创建数据库(.mdb)准备工作新建数据库 准备工作 1、一台电脑; 2、安装 Microsoft access database; 新建数据库 打开你准备创建数据库的位置,右键单击——》新建——》 Microsoft access database(注意:文件格式要选*.mdb) 打开数据库文件,创建——》表; 对数据表进行编辑,编辑表头、编辑表的内容、增加表的数量; 编辑表头:选中要编辑的表——》表设计 编辑内容:类似于excel添

weixin_42256550的博客 3149

MySQL之B树和B+树

首先抛个问题,MySQL的索引为何用树而不是其他数据结构如hash,hash的读和写都是O(1),而树的话查询和插入都是O(log(n))? 答:因为索引设计成树,是和SQL需求相关的,如果单独只查询某条数据,自然是hash算法快,但是我们平常用的查询往往不是只查询单条数据,而是order by,group by,< >这种排序查询,遇到这种情况,hash就会退化成O(n),而树因为它...

sky_100的博客 1万+

Unity海洋渲染实战:Ceto Ocean System核心原理与高级应用指南

实时水面渲染是计算机图形学中的重要课题,涉及波浪模拟、光照交互和着色器编程等核心技术。其原理通常基于物理模型,如使用Gerstner波模拟规则海浪,或通过快速傅里叶变换(FFT)处理频谱数据生成随机海面。这些技术的价值在于能以可控的性能开销,在游戏中实现具有体积感、反射和折射效果的真实水体。在开放世界、海战模拟等应用场景中,专业的海洋系统如Ceto Ocean System,通过模块化架构整合了波浪生成、动态网格和渲染管线,为开发者提供了完整的解决方案。本文深入探讨了其双引擎波浪系统和多层渲染结构,并分享了

weixin_29002595的博客 282

【天线与电波传播】电波传播部分 第7章 电波传播的基础知识3

菲涅尔区与菲涅尔带的基本知识

Chen59_2328的博客 1601

MySQL 理解B树与B+树

MySQL 理解B树与B+树

26857259 1366

【代码审计】专栏文章汇总

代码审计基础 代码审计基础 源代码审计思路(上) 源代码审计思路(下) 常见漏洞审计 认证会话管理(上) 认证会话管理(下) 输入输出验证 授权管理审计 业务安全审计 第三方组件审计

武天旭的博客 4846

MySQL为什么使用B+树?B+树和B树的区别

MySQL为什么使用B+树?B+树和B树的区别

热爱C++和golang的学生 2264

Camunda 7.x 系列【62】启动流程实例源码解析

为了更好的了解Camunda,接下来我们简单分析下启动流程实例相关源码

记录知识、锤炼自我 1174

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Mysql索引B树跟B+树

索引底层实现原理 数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘块(对应索引树的节点),索引树越低,越矮胖,磁盘IO次数就少 MySQL支持两种索引,一种的B-树索引,一种是哈希索引,大家知道,B-树和哈希表在数据查询时的效率是非常高的。这里我们主要讨论一下MySQL InnoDB存储引擎,基于B-树(但实际上MySQL采用的是B+树结构)的索引结构。 B树 B-树是一种m阶平衡树,m一般是300-500(经验值),叶子节点都在同一层,由于每一个节点存储的

Mr_Csyn的博客 2336

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

B树与B+树的区别,为什么MySQL使用B+树不使用B树

B树:B+树:B树:B+树:B树:适合频繁插入、删除的场景,但范围查询性能较差,因为数据分散在树的各层级中。B+树:适合数据库这种需要频繁范围查询和排序的场景,因为所有数据都在叶子节点,并且叶子节点有序连接。B+树的优势: 所有数据都在叶子节点,且叶子节点之间通过链表相连。B树的问题: 数据分散在所有节点(非叶子和叶子),范围查询时必须遍历整棵树,增加了磁盘IO开销。场景:图书馆的书架管理B树:B+树:以下是一个简单的 B+ 树实现,重点关注插入和范围查询功能。 java节点的定义:插入逻辑:范围

error_log7的博客 1395

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

MySQL 索引:索引为什么使用 B+树?(详解B树、B+树)

本文探讨了MySQL选择B+树作为索引结构的原因。首先分析了二叉查找树(BST)可能退化为链表导致查询效率下降的问题,进而引入平衡二叉树(AVL)和红黑树,指出AVL旋转耗时、红黑树虽然性能更优但树高仍然过高的问题。特别针对磁盘存储场景,提出树高过高会导致IO次数增加,影响性能。通过对比哈希索引和二分查找的优缺点,指出二叉查找树在磁盘存储中的局限性,最终说明B+树因其矮胖特性、减少IO次数、支持范围查询等优势,成为数据库索引的理想选择。

Atticus的博客 2174

浅析——B树,B+树,B*树以及分析MySQL的两种引擎

接触到了数据结构当中的B树,B+树,B*树,我觉得应该写一篇博客记录下,毕竟是第一次接触的,只有写了博客以后,感觉对这个的印象才会更加深刻。 前言: 为什么要有B树? 学习任何一个东西我们都要知道为什么要有它,B树也一样,既然存储数据,我们为什么不用红黑树呢?这个要从几个方面来说了, 计算机有一个局部性原理,就是说,当一个数据被用到时,其附近的数据也通常会马上被使用。 所以当你用红黑树的时

宇哲 1万+

MySQL之B+树详解

理论是灰色的,实践之树长青???? ——恩格斯 概述 MySql这样的关系型数据库在查询方面有一些重要特性,是KV型的数据库或者 缓存所不具备的,比如: (1)范围查询。 (2)前缀匹配模糊查询。 (3)排序和分页。 这些特性的支持,要归功于B+树这种数据结构。下面我们来分析一下B+树是如何支持这些特性的。 逻辑结构 这里我们拿数据库主键对应的B+树逻辑结构来说明,这个结构有几个关键特性: 在叶子节点一层,所有记录的主键按照从小到大的顺序排 列,并且形成了一个双向链表。叶子节点的每一个Key指向一条记录

璟矢 1万+

为什么MySQL使用B+而不是使用B树、二叉树、AVL树呢?(来龙去脉的去理解)

当你回答使用B+ 怎么怎么好的时候,其实这道面试题你就注定答不满分了,你应该是从一步步如果演变到使用B+来做MySQL的数据结构,下面就一步一步从二叉树——>AVL(平衡二叉树)——>B Tree(多路平衡查找树)——>B+ Tree的一个演变的过程来进行分析,为什么使用B+ Tree的? (1)先从二叉树开始说起: 首先你得知道二叉树是什么吧:看下面的图一你就该很熟悉了吧 然...

王伟的博客 6769

二叉树、B树(B-树)、B+树、B*树详解,以及为什么MySQL选择B+树做索引

温故而知新,可以为师矣。看到一篇介绍B数和B减树的文章,这里记录一下。 1. 简要 众所周知,MySQL的索引使用了B+树的数据结构。那么为什么不用B树呢? 先看一下B树和B+树的区别。 2. 二叉树 先介绍一下二叉搜索树。 顾名思义,二叉搜索树,即指最多拥有两个叉,这里的叉即为所有非叶子结点的儿子(Lift和Right); 所有的结点存储一个关键字; 非叶子结点的左指针指向小于其关键字的结点,右指针指向对于其关键字的结点,结构如下图: 二叉搜索树的搜索,从根结点开始,如果查询的关...

zzhongcy的专栏 4432

一文彻底搞懂MySQL基础:B树和B+树的区别

大家在面试的时候,肯定都会被问到MySql的知识,以下是面试场景: 面试官:对于MySQL,你对他索引原理了解吗? 我:了解 面试官:MySQL的索引是用什么数据机构的? 我:B+树 面试官:为什么要用B+树,而不是B树? 我:… 面试官:用B+树作为MySql的索引结构,用什么好处? 我:…B树和B+树是MySQL索引使用的数据结构,对于索引优化和原理理解都非常重要,下面我的写文章就是要把B树,B+树的神秘面纱揭开,让大家在面试的时候碰到这个知识点一往无前,不再成为你的知识盲点!B-树,这里的 B 表示

目标检测专栏持续更新中,改进YOLO系列通用,适用v5、v7、v8、所有博客均是团队原创博客,所有文章禁止转载,违者必究。 6202

B树、B+树的区别及MySQL为何选择B+树

B树和B+树都是一种多路搜索树,常用于数据库和文件系统中进行索引操作。在介绍B树和B+树的区别之前,先来了解一下它们的定义。

青山师 1505

【高阶数据结构-B树】B树的介绍+代码实现+(B+树与B*树)+MySQL中B树的应用

B树:有序数组+平衡多叉树;B+树:有序数组链表+平衡多叉树;B*树:一棵更丰满的,空间利用率更高的B+树。mysql是目前非常流行的开源关系型数据库,不仅是免费的,可靠性高,速度也比较快,而且拥有灵活的插件式存储引擎,如下:MySQL中索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。注意:索引是基于表的,而不是基于数据库的。

2202_75331338的博客 1213

浅谈MySQL中B树和B+的区别

你了解MySQL的索引吗?MySQL底层的数据结构是什么?B+树与B树的区别?MySQL为什么使用B+树作为索引结构?本篇文章将为你解答上述这些问题,让我们在面试的时候回答的游刃有余,并强化我们对MySQL的理解。索引是一种用于快速查询和检索数据的数据结构。它类似我们于查字典,当查询不会的单词时,总是先通过目录去查找,而不是一页一页的去翻找。索引底层数据结构有很多种,常见的有:B+树、B树、Hash和红黑树。本篇只针对B树和B+树展开阐述。

weixin_69077250的博客 1744
上一篇: 反射中Class.forName()和ClassLoader.loadClass()的区别
下一篇: spring事务总结
还叫康师傅
博客等级 码龄7年 156粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值