Mysql索引的了解:B-Tree(B-树)和B+Tree(B+树)

简单剖析B树(B-Tree)与B+树 注意:首先需要说明的一点是:B-树就是B树,没有所谓的B减树 引言   我们都知道二叉查找树的查找的时间复杂度是O(log N),其查找效率已经足够高了,那为什么还有B树和B+树的出现呢?难道它两的时间复杂度比二叉查找树还小吗?   答案当然不是,B树和B+树的出现是因为另外一个问题,那就是磁盘IO;众所周知,IO操作的效率很低,那么,当在大量数据存储中,查询时我们不能一下子将所有数据加载到... 阅读详情

为什么会使用B-Tree和B+Tree,而不是二叉树、红黑树
数据结构

说索引之前需要先提到一点,树结构做查找时,最坏情况需要查找的次数是树的高度H,而对于Mysql来说,当数据文件很大时,就需要根据树的节点把对应的数据加载到内存中,也就是I/O。

上面的形容中有几点信息:

树高H影响查找次数;
上一点中的每一次查找还会涉及到磁盘I/O;

记 N 为 B-tree 中的 Key 的数据量,d 为内节点出度的二分之一,则我们可以证实 
H \leq \frac{\log_d(N + 1)}{2}
渐进复杂度为
 O(H) = O(log_dN)。

d 为内节点出度,表示非根节点和叶子节点拥有最少的子女数,并且规定最大不能超过 2d。注意:这里也有文献会反过来表示,即最大为 d, 最少不能少于
\frac{d}{2}

很显著,树高度H越高查询效率越低。
回到问题上,我相信很多人已经猜到了为什么B树会比二叉树更正当了!但是这只是说明了一个层面的东西,高度越低查询次数越少。
局部性原理与磁盘预读

因为存储介质的特性,磁盘本身存取就比主存慢很多,再加上机械运动耗费,磁盘的存取速度往往是主存的几百分分之一,因而为了提高效率,要尽量减少磁盘I/O。为了达到这个目的,磁盘往往不是严格按需读取,而是每次都会预读,即便只要要一个字节,磁盘也会从这个位置开始,顺序向后读取肯定长度的数据放入内存。这样做的理论依据是计算机科学中著名的局部性原理:当一个数据被用到时,其周围的数据也通常会马上被使用。因为磁盘顺序读取的效率很高(不需要寻道时间,只要很少的旋转时间),因而对于具备局部性的程序来说,预读可以提高I/O效率。
数据库系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只要要一次I/O即可以完全载入。为了达到这个目的,在实际实现B-Tree还需要使用如下技巧:
每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只要一次I/O。
B-Tree 和 B+Tree 区别

最大上的不同是内节点不存储数据。
另外,每个节点的指针数不一样,B-Tree 是数据隔开指针,上文提到过最大子女数是 2d,所以B-Tree的最大指针数是 2d+1;而B+Tree 是 2d。
Mysql不同索引实现

通过上文两点,我们了解了为什么使用B树。但同样是B树,也有不同的使用。
聚集和非聚集

聚集与非聚集的主要区别可了解为索引的叶子节点中存储是真实的数据还只是指针。这一点,在MyISAM和InnoDB的主键之间体现是不同的。MyISAM使用的是非聚集,最好的体现在MyISAM的存储文件分为索引文件(.MYI)和数据文件(.MYD),而InnoDB是索引和数据在一个文件里。

上文可了解MyISAM和InnoDB区别之:

    存储的文件内容不一样;
    由于InnoDB是根据主键聚集数据的,所以在创立InnoDB表时必须要有主键;
    扩展一点:InnoDB辅助索引是根据主键值聚集的;什么意思?就是InnoDB的非主键索引的叶子节点里存储的是主键的值;

喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
如果你对java技术很感兴趣也可以加入我的java学习群(374308445)来交流学习,里面都是同行,群验证【优快云2】有资源共享。

MySQL—2、B-Tree,B+Tree,聚集索引,非聚集索引 今天研究下,mysql中的B-tree索引,通过这篇文章你可以了解到,mysql中的btree索引的原理,检索数据的过程,innodb和myisam引擎中btree索引的不同,以及btree索引的好处和限制。B-Tree 索引是 MySQL 数据库中使用最为频繁的索引类型,除了 Archive 存储引擎之外的其他所有的存储引擎都支持 B-Tree 索引。不仅仅在 MySQL 中是如此,实际上在其他... 阅读详情

相关推荐

mysql 索引 B+tree

注意,内存中的页并不直接反映磁盘上的物理布局,而是经过了数据库系统的逻辑组织和管理,确保了即使在不同的硬件环境下,也能保持高效的读写性能。时,MySQL 会从内存缓存池(Buffer Pool)中查找对应的 B+Tree 索引页,如果不在缓存中则从磁盘读取。从根节点开始,沿着键值比较的路径向下遍历,最终到达存储该。内存中加载了一个 B+Tree 的索引页,这个页包含了多个槽(slot),每个槽包括键值(如。的叶子节点,叶子节点中找到对应的记录指针,再通过该指针获取完整的数据行。

semicolon_hello的专栏 1093

MYSQL索引之B+tree

01、分析 MySql底层的数据结构主要是基于Hash 和 B+Tree 01-01、二叉查找树 数据结构动态操作网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html java版本下载:https://www.cs.usfca.edu/~galles/visualization/java/visualization.jar 下载以后执行:java -jar visualization.jar 01-02、二叉树数据存

qq_33513600的博客 1455

AdTree:激光扫描树的准确,详细和自动建模

AdTree实现了以下描述的树重构方法: Shenglan Du, Roderik Lindenbergh, Hugo Ledoux, Jantien Stoter, and Liangliang Nan. AdTree: Accurate, Detailed, and Automatic Modelling of Laser-Scanned Trees. Remote Sensing. 2019, 11(18), 2074. 如果您使用代码/程序(或部分代码),请考虑引用我们的论文。 从点云重建的3D树 生成并运行AdTree 预编译的可执行文件(适用于macOS , Linux和Windows )可在下载。 AdTree依赖于某些第三方库,并且大多数依赖项都包括在除外。 因此,您需要先安装Boost。 注意:AdTree使用已剥离的早期版本,该版本与最新版本不兼容。 您需

MySQL数据结构B+Tree

MySQL数据库索引底层采用B+Tree,了解B+Tree先从B-Tree说起。本问主要是在BTree和B+Tree详解这个文章的基础上整理而来: B-Tree 每个节点包含key、data和指针,key和data一一对应,其中key为键值,按照升序进行排列;而data为对应的数据。其中每个非叶子节点的1指针个数=key个数+1。实例如下图所示: B+Tree 非叶子节点只有key,叶子节点有key和data,而叶子节点之间有链指针。实例如下: 相对于b-tree,b+tree非叶子节点只存储key值和

cai1493105270的博客 344

多元交替决策树:多元 ADTrees 是交替决策树 (ADTree) 的多元扩展。-matlab开发

多元 ADTree 是交替决策树 (ADTree) 的多元扩展。 这些变体是 Fisher 的 ADTree、Sparse ADTree 和 Regularized Logistic ADTree。 将 Ridge、Lasso 和 Elastic Net 等正则化技术纳入 ADTree,这是一种基于 boosting 算法诱导的特殊决策树。 查看此链接了解更多信息: http : //aue.erc.monash.edu.au/webMathematica/Asue/ADTree.jsp 如果您在工作中使用工具箱,请引用以下论文: 1. Sok HK, Ooi M PL, Kuang YC and Demidenko S 2016 多元交替决策树模式识别 50 195-209 2. Sok HK、Ooi M PL 和 Kuang YC 2015 稀疏交替决策树模式识别快报 60 57-64

《第二十二篇》Cross-Attention:注意力机制详解-代码实现和公式详解《二》

本文详细介绍了Cross-Attention的原理、公式和实现。Cross-Attention用于Transformer解码器和Encoder-Decoder结构,通过查询向量(Q)与键、值向量(K、V)的交互实现序列对齐。核心公式为softmax(QK^T/√d_k)V,其中Q来自Decoder,K、V来自Encoder。文章还给出了多头注意力机制公式和PyTorch实现代码,包括投影计算、注意力分数计算和输出处理。代码示例展示了如何构建一个完整的Cross-Attention模块,并演示了其在解码器查询

guoguozgw的博客 2210

B tree、B-tree和B+tree

(1)B tree     即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中; 否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就

殇沫流年的专栏 2915

Unity AssetBundle解包实战指南:从工具使用到编程解析

在游戏开发与资源管理中,资源打包与加载是核心技术环节。AssetBundle作为Unity引擎官方推荐的资源分发方案,其本质是一个包含头部信息、目录表、数据区及依赖关系的结构化文件系统,通过序列化机制将游戏资源转换为二进制格式。理解AssetBundle的机制对于实现高效的热更新、减少资源冗余、优化加载性能具有重要价值,广泛应用于游戏开发、竞品分析、技术研究等场景。本文聚焦AssetBundle解包这一实践需求,系统介绍如何利用AssetStudio、UABE等主流工具进行资源提取与可视化分析,并深入探讨通

weixin_28192383的博客 347

B-tree的详细解释,公式推导和增删查

目录 B-tree 一、术语 二、定义 三、n个关键字,阶数为m,高度为h,有如下公式: 四、B树的查找: 五、B树的插入: 六、B树的删除: B-tree 全称Balance-tree(平衡多路查找树),平衡的意思是左边和右边分布均匀。多路的意思是相对于二叉树而言的,二叉树就是二路查找树,查找时只有两条路,而B-tree有多条路,即父节点有多个子节点。 一、术语 阶:...

Kevin_819的博客 2235

Linux内核4.14版本——drm框架分析(1)——drm简介

drm框架分析

yangguoyu8023的博客 1万+

JW01二氧化碳传感器实战:5分钟搞定Arduino环境监测系统(附完整代码)

本文详细介绍了如何使用JW01二氧化碳传感器与Arduino快速搭建环境监测系统。通过简单的硬件连接和完整的代码示例,读者可以在5分钟内实现CO2浓度实时监测,并了解数据解析、常见问题解决及进阶应用扩展。JW01传感器的高精度和易用性使其成为创客和嵌入式开发者的理想选择。

kite3的博客 382

mysql索引b-tree_Mysql索引的了解:B-Tree(B-树)和B+Tree(B+树)

为什么会使用B-Tree和B+Tree,而不是二叉树、红黑树数据结构说索引之前需要先提到一点,树结构做查找时,最坏情况需要查找的次数是树的高度H,而对于Mysql来说,当数据文件很大时,就需要根据树的节点把对应的数据加载到内存中,也就是I/O。上面的形容中有几点信息:树高H影响查找次数;上一点中的每一次查找还会涉及到磁盘I/O;记 N 为 B-tree 中的 Key 的数据量,d 为内节点出度的二...

weixin_42321496的博客 119

Allegro23.1新功能之软件自带阻抗计算工具操作指导

Allegro升级到了23.1后,软件新增了一个自带阻抗计算的功能,如下图。Propagation velocity:传输速度,单位是光速的多少倍。Dielectric constant输入介电常数,这里使用常规4。新功能之软件自带阻抗计算工具。如何使用,具体操作如下。

weixin_54787054的博客 783

【Mysql 底层原理】MySQL 索引原理:B-Tree 和 B+Tree 的区别与应用

博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主。

激流丶的博客 2837

合肥工业大学嵌入式系统原理实验报告

GPKDAT 的6、7引脚设置低电平,设置GPKDAT = 0x30则34灯亮12灯灭,GPKDAT 的4、5、6、7引脚全为高电平,设置GPKDAT = 0xf0,则led灯全灭。注意在烧写时要连接主机后面的USB接口,烧写完成后,要关闭开发板电源,将S2拨动开关置于NAND位置,然后重新开启开发板电源, 则开发板运行刚刚烧入的裸机程序。实验修改要求:在延时不变的条件下,将原程序中四个LED全亮,然后全灭的显示状态,修改为“四个全亮,然后1和2亮(3和4灭),然后3和4亮(1和2灭),最后全灭”。

Martin-share的博客 3097

手把手教你学基于 Linux 的 NPU 固件开发-第 10 讲:可靠性设计(RAS)——让系统坚如磐石错误检测、纠正与上报机制(ECC、Parity)

组件推荐保护机制备注HBM/DDRScrubbing必须开启,定期巡检片上 SRAMECC(权重/激活值),Parity(指令)权衡面积与可靠性计算单元ABFT或DMR(关键路径)防止计算逻辑错误片上网络CRC重传保证数据传输完整性系统软件AER 上报CE 监控自动恢复闭环管理,杜绝 SDC运维策略预测性维护Checkpoint变被动为主动核心心法(信任硬件,但必须验证。在纳米尺度下,错误是必然发生的物理现象。

MHD0815的博客 90

MySQL索引(B树、B+树)

目录简介索引结构(树)为什么用树,而不用哈希表BTree索引B+Tree索引聚簇索引与非聚簇索引 简介 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。 一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。 优点: 1、类似大学图

guochaoHNU的博客 7987

Far planner 部署真实小车 & 树莓派部署lego_loam

今天开一贴Far planner的部署,也算是lego loam的部署吧 因为state_estimation用的是lego loam小车底盘: 轮趣的mini差速底盘外加多一层钢板,中间层用来放velodyne的电池(小的电池还没到,大的电池塞不进去目前)和velodyne信号盒子。前面还可以加一个相机。底层用来放小车的电池和马达等设备了,底层不用动。最上面一层用来安装velodyne16线雷达,需要额外钻孔(如果买轮趣的话可以找老板钻个孔?我也不确定,我自己钻的)。 雷达固定螺丝用的是 1/4-20*3

博客 4303

MySQL索引原理B+树

B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。 二叉查找树 二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根的键值。 如下图所示就是一棵二叉查找树。 对该二叉树的节点进行查找发现深度

学Java,找哪吒 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MySQL 索引底层为什么选择B+Tree

MySQL笔记(七):MySQL索引       索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 为什么要使用索引 索引能够大大的减少存储引擎需要扫描的数据量,无索引则进行全表扫描; 索引可以把随机IO变成顺序IO(因为IO操作很耗时); 索引可以帮助我们在...

扛麻袋的少年的博客 3593

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MYSQL索引B+tree详解

前言 二叉树、平衡树、B树做铺垫,来讲解B+tree。这里对于数据结构不做详细解释,只讲与本文有关的知识。 一、二叉树 首先,明确几个概念,每个树结构,只有一个根节点。最下一层,没有子节点的节点叫叶子节点,初根节点和叶子节点外的节点,叫非叶子节点。 二叉树,顾名思义,就是子节点最多有两个分支的树,如下图: 由二叉树定义以及图示分析得出二叉树有以下特点: 1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。 2)左子树和右子树是有顺序的,次序不能任意颠倒。 3)即使树中某结点只有一棵子树,也要区分

敲代码的小小酥的博客 5831

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

[MySQL]索引和B、B+树

在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。假设我们有存了100个 1~999的数字,在没有索引的情况下,数据库会对表全表扫描,如果我要查找的记录排在表的后面,那么就需要越过大半的记录才能查找到我需要的记录。此时的查找效率会很低。

m0_74217128的博客 1315

mysql的索引innodb和myisam, 以及B+Tree和B-Tree详解

一. mysql的索引 mysql常用的索引有以下几种: hash索引 hash索引通过hash值来匹配对应的数据,类似键值对的形式,查找的时候可以精准一次定位,但是对于范围查询,排序效率不高,并且hash索引不能避免全表扫描,因为hash值并不能完全保证一个hash值匹配一个数据(hash冲突),还是需要比对实际数据 btree索引 MySQL里默认和最常用的索引类型,利用二分查找的思想...

zzzgd_666的博客 3234

B+树(B+TREE)索引

InnoDB的B+树的阶(也就是树的分支因子)并不是一个固定的值,而是取决于几个因素,主要是页面(Page)的大小。总的来说,InnoDB的B+树通常是非常高阶的,这有助于减少树的高度,提高查询效率。例如,一个阶为4的B+树的每个节点最多有4个子节点。:B+树是一种多路平衡查找树,树的每个节点最多包含m个子节点(m是树的阶),除根节点和叶子节点外,其他每个节点至少有m/2个子节点。实际的B+树可能会有更多的关键字和层级,但查找原理是相同的:从根节点开始,根据关键字的大小逐层向下搜索,直到达到叶子节点,

坚定目标,超越自我 3130

MySQL为何偏爱B+树索引

在MySQL中,RTree(R-Tree)是一种特殊的数据结构,用于高效地存储和查询空间数据,特别是用于处理地理空间数据(例如地理坐标、多边形区域等)。RTree是一种树状结构,用于索引多维数据,使得范围查询、近邻搜索和空间连接等操作能够在较短的时间内执行。

Hanko的专栏 1499

MySQL的索引和B+tree结构

一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。一本 500 页的书,如果你想快速找到其中的某一个知识点,在不借助目录的情况下,那你可能得找一会儿。同样,对于数据库的表而言,索引其实就是它的“目录”。所以,索引就是提高查询速度的数据结构(有序的)。而能提高查询速度的,说明这些数据是按照一定规则排序好的。索引的优缺点提高数据检索效率,降低数据库的IO成本通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗索引列也是要占用空间的。

m0_57408211的博客 961
上一篇: 面试题系列解答:Mysql怎么分库分表
下一篇: 面试题解答系列:关系型数据库和非关系型数据的比较
程序员plus
博客等级 码龄8年 41粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值