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

【MySQL索引:B+树与页的深度解析】

文章目录

  • MySQL索引:B+树与页的深度解析
    • 1. 索引使用的数据结构——B+树
      • 1.1 B+树介绍
      • 1.2 B+树的特点
      • 1.3 B+树和B树的对比
    • 2. MySQL中的页
      • 2.1 页的介绍
      • 2.2 页主体
      • 2.3 页目录
      • 2.4 B+树在MySQL索引中的应用

MySQL索引:B+树与页的深度解析

在MySQL数据库中,索引扮演着至关重要的角色,它作为一种数据结构,极大地助力了数据库在查询、存储及更新数据时的高效运作。鉴于在数据库操作里,查询的频率远远高于增删改的频率,索引的核心作用便在于提升数据检索的效率。

1. 索引使用的数据结构——B+树

1.1 B+树介绍

B+树是一种在数据库与文件系统等领域广泛应用的平衡查找树。以下是一个3阶B+树的示例图:

1.2 B+树的特点

结合上述图示,我们能够归纳出B+树具备以下特点:

  1. 数据有序性与操作复杂度:B+树能够维持数据的稳定有序,无论是插入还是修改操作,其时间复杂度均保持一致。
  2. 节点存储特性:非叶子节点仅承担索引功能,并不存储实际数据,而所有的叶子节点则负责保存真实的数据。
  3. 叶子节点链表结构:所有的叶子节点共同构成了一个有序链表,借助这一链表,可以依据排序次序依次遍历全部数据。

1.3 B+树和B树的对比

B树的结构如下图所示:

通过与B树对比,我们可以明晰B+树所具有的独特特点:

  1. 节点值包含关系:在B+树中,非叶子节点的值涵盖于叶子节点之中。
  2. 叶子节点数据连续性:B+树的叶子节点数据呈现连续且相互链接的状态,这一特性使得区间查找与搜索更为便捷。
  3. 性能均衡性:在树高相同的前提下,B+树查找任意元素的时间复杂度恒定,性能表现更为均衡。

2. MySQL中的页

2.1 页的介绍

  1. 数据存储位置:数据库中的数据存储于磁盘之上。
  2. 页内地址连续性:磁盘中每个页内部的地址是连续的。
  3. 页的作用与大小:页是内存与磁盘交互的最小单元,默认大小为16KB。即便某一页没有数据,也会占用16KB的存储空间,并且页与索引的B+树节点相对应。

在MySQL中存在多种类型的页,其中最常用的便是用于存储数据和索引的“数据页”或“索引页”。无论何种类型的页,都具备“页头”与“页尾”,页的主体信息则由“数据行”填充。

“数据页”的基本结构如下图所示:

由于页头包含上一页和下一页的页号,借助这两个属性,能够将页与页连接起来,形成一个双向链表。

2.2 页主体

每当创建一个新页时,系统会自动分配两行,一行代表页内最小行,另一行代表页内最大行。这两行并不存储实际信息,而是作为数据行链表的起始与结束标志。

当插入数据时,数据会被插入到最小行与最大行之间,并按照主键从小到大的顺序进行链接。

2.3 页目录

当一个页中存储的数据量过多时,查找数据会变得繁琐。为提升查找效率,InnoDB采用二分查找的方式来解决这一问题。

具体实现方式为创建一个页目录,将页内所有行进行分组,分组规则如下:

  • 头行(最小行)单独作为一组。
  • 其余行按照顺序分组,每组最多8条数据。

页目录中的一个槽对应一个分组,每组的最后一行地址会被记录在槽中。如此一来,在查找某行数据时,可先通过二分查找确定对应的槽,再在槽所对应的组中进行遍历,从而显著提高查询效率。

2.4 B+树在MySQL索引中的应用

在MySQL索引中,B+树的非叶子节点保存索引数据,叶子节点保存真实数据,如下表所示:

以下以查找“主键 = 3”为例,简要阐述其查找过程:

  1. 在索引页1中:由于3 < 7,所以进入索引页2。
  2. 在索引页2中:因为3 <= 3 < 5,进而进入数据页2。
  3. 在数据页中执行二分查找(依据分组的槽),确定对应的槽。
  4. 在对应的组中进行遍历,最终获取到数据。

相关文章:

【MySQL索引:B+树与页的深度解析】

文章目录 MySQL索引&#xff1a;B树与页的深度解析1. 索引使用的数据结构——B树1.1 B树介绍1.2 B树的特点1.3 B树和B树的对比 2. MySQL中的页2.1 页的介绍2.2 页主体2.3 页目录2.4 B树在MySQL索引中的应用 MySQL索引&#xff1a;B树与页的深度解析 在MySQL数据库中&#xff0…...

在 macOS 上,用命令行连接 MySQL(/usr/local/mysql/bin/mysql -u root -p)

根据你提供的文件内容&#xff0c;MySQL 的安装路径是 /usr/local/mysql。要直接使用 mysql 命令&#xff0c;你需要找到 mysql 可执行文件的路径。 在 macOS 上&#xff0c;mysql 客户端通常位于 MySQL 安装目录的 bin 子目录中。因此&#xff0c;完整的路径应该是&#xff1…...

深入HDFS——数据上传源码

引入 就如RPC篇章里提到的观点一样&#xff0c;任何一种能广为传播的技术&#xff0c;都是通过抽象和封装的思想&#xff0c;屏蔽底层底层复杂实现&#xff0c;提供简单且强大的工具&#xff0c;来降低使用门槛的。 HDFS的风靡自然也是如此。 通过前面深入了NameNode和DataN…...

归并排序算法

归并排序 1算法介绍 和选择排序一样&#xff0c;归并排序的性能不受输入数据的影响&#xff0c;但表现比选择排序好的多&#xff0c;因为始终都是O(n log n&#xff09;的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用…...

优雅解决webview_flutter不支持安卓选择图片视频文件问题

这个问题&#xff0c;网上一搜索&#xff0c;就是要去修改别人写好的插件。 搞Flutter开发&#xff0c;尽量不要去修改别人的插件 &#xff0c;特别是像 webview_flutter 这种比较大的官方插件。 相信我&#xff0c;你拿捏不了它。 主要问题就是&#xff1a; webview_flutter…...

Linux UDP 编程详解

一、引言 在网络编程领域&#xff0c;UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;作为一种轻量级的传输层协议&#xff0c;具有独特的优势和适用场景。与 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff0…...

UllnnovationHub,一个开源的WPF控件库

目录 UllnnovationHub1.项目概述2.开发环境3.使用方法4.项目简介1.WPF原生控件1.Button2.GroupBox3.TabControl4.RadioButton5.SwitchButton6.TextBox7.PasswordBox8.CheckBox9.DateTimePicker10.Expander11.Card12.ListBox13.Treeview14.Combox15.Separator16.ListView17.Data…...

[Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令

[Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令 简介 项目分析 如何执行系统命令并拿到结果 代码实现 简介 在Python学习日记-77中我们介绍了 socket 基于 TCP 和基于 UDP 的套接字&#xff0c;还实现了服务器端和客户端的通信&#xff0c;本…...

css3过渡总结

一、过渡的定义与作用 CSS3 过渡&#xff08;Transitions&#xff09;允许 CSS 属性在一定的时间区间内平滑地过渡&#xff0c;从一个值转变为另一个值。它能够让网页元素的状态变化更加自然、流畅&#xff0c;给用户带来更好的视觉体验。例如&#xff0c;当一个元素从隐藏状态…...

生产环境中常用的设计模式

生产环境中常用的设计模式 设计模式目的使用场景示例单例模式保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点- 日志记录器- 配置管理器工厂方法模式定义一个创建对象的接口&#xff0c;让子类决定实例化哪个类- 各种工厂类&#xff08;如视频游戏工厂模式创…...

【STM32-学习笔记-4-】PWM、输入捕获(PWMI)

文章目录 1、PWMPWM配置 2、输入捕获配置3、编码器 1、PWM PWM配置 配置时基单元配置输出比较单元配置输出PWM波的端口 #include "stm32f10x.h" // Device headervoid PWM_Init(void) { //**配置输出PWM波的端口**********************************…...

游戏行业销售数据分析可视化

完整源码项目包获取→点击文章末尾名片&#xff01; &#x1f31f;分析&#xff1a; 可看出最近五年用户最喜爱的游戏类型依然还是Action-动作类&#xff08;当然市场发行的也很多&#xff09; Sports-运动类和Shooter-射击类顺序互换,但我估计现在大环境局势紧张可以会推动射击…...

微服务网关,如何选择?

什么是API网关 API网关&#xff08;API Gateway&#xff09;是微服务架构中的一个关键组件&#xff0c;它充当了客户端与后端服务之间的中间层。其主要功能包括请求路由、协议转换、负载均衡、安全认证、限流熔断等。通过API网关&#xff0c;客户端无需直接与多个微服务交互&a…...

Java开发提速秘籍:巧用Apache Commons Lang工具库

一、Java 开发效率之困 在当今数字化时代&#xff0c;Java 作为一门广泛应用的编程语言&#xff0c;在各类软件开发项目中占据着举足轻重的地位。无论是大型企业级应用、互联网平台&#xff0c;还是移动应用后端&#xff0c;都能看到 Java 的身影。然而&#xff0c;Java 开发者…...

多用户商城系统源码哪家好用?怎么选?

想拥有属于自己的多用户商城系统&#xff0c;但回头一看自己又是个技术小白&#xff0c;看着网上眼花缭乱的b2b2c商城系统&#xff0c;更是不知道如何选起&#xff1f;下面给大家分享一条较为成熟的选择思路&#xff0c;以作参考。 1、从需求上决定系统方向 企业在选型b2b2c商…...

聊聊如何实现Android 放大镜效果

一、前言 很久没有更新Android 原生技术内容了&#xff0c;前些年一直在做跨端方向开发&#xff0c;最近换工作用重新回到原生技术&#xff0c;又回到了熟悉但有些生疏的环境&#xff0c;真是感慨万分。 近期也是因为准备做地图交互相关的需求&#xff0c;功能非常复杂&#x…...

NVIDIA视频编解码

开源了两个项目&#xff1a;英伟达显卡视频编解码、jetson视频编解码。都是基于官方SDK进行的封装&#xff0c;由于官方自带的demo晦涩难懂并且每块都是独立的&#xff0c;我对SDK进行二次封装并形成了一套较为完整的视频编解码流程&#xff0c;调用简单&#xff0c;有完整的测…...

Mysql事务隔离级

什么是事务的隔离级别 数据库事务的隔离级别是指事务在并发执行时&#xff0c;如何控制事务之间相互影响的程度。它决定了多个事务并发执行时&#xff0c;事务中的操作对其他事务的可见性&#xff0c;进而影响数据的一致性和并发性。 为什么会有隔离级别的概念&#xff1f; …...

K210视觉识别模块

K210视觉识别模块是一款功能强大的AI视觉模块&#xff0c;以下是对其的详细介绍&#xff1a; 一、核心特性 强大的视觉识别功能&#xff1a;K210视觉识别模块支持多种视觉功能&#xff0c;包括但不限于人脸识别、口罩识别、条形码和二维码识别、特征检测、数字识别、颜色识别…...

springboot使用websocket

文章目录 一、概述1、简介 二、 使用1、引包2、配置处理器3、前端测试 一、概述 1、简介 简介略&#xff0c;附上官方文档&#xff0c;spring5和spring6的官方文档内容大致是一样的&#xff1a; https://docs.spring.io/spring-framework/docs/5.2.25.RELEASE/spring-framewo…...

线程池底部工作原理

线程池内部是通过线程和队列实现的&#xff0c;当我们通过线程池处理任务时&#xff1a; 如果线程池中的线程数量小于corePoolSize&#xff0c;无论是否有处于空闲的线程&#xff0c;都创建新的线程来处理被添加的任务。 如果线程池中的线程数量等于corePoolSize&#xff0c;…...

DevUI 2024 年度运营报告:开源生态的成长足迹与未来蓝图

在当今数字化飞速发展的时代&#xff0c;开源已成为推动技术创新与协作的重要力量。DevUI 作为开源领域的重要一员&#xff0c;其发展历程与成果备受关注。值此之际&#xff0c;GitCode 精心整理了 DevUI 年度运营报告&#xff0c;为您全面呈现 DevUI 社区在过去一年里的开源之…...

Mybatis面试题

Mybatis面试题 什么是 MyBatis&#xff1f;讲下 MyBatis 的缓存Mybatis 是如何进行分页的&#xff1f;分页插件的原理是什么&#xff1f;简述 Mybatis 的插件运行原理&#xff0c;以及如何编写一个插件&#xff1f;Mybatis 动态 sql 是做什么的&#xff1f;都有哪些动态 sql&am…...

Python获取系统运行时间

有时候想获取系统启动后到现在的运行时间&#xff0c;在Linux C可以使用clock_gettime()来获得&#xff0c;如下&#xff0c; #include <time.h> #include <stdio.h>int main() {struct timespec ts;clock_gettime(CLOCK_MONOTONIC, &ts);printf("syste…...

软考高级5个资格、中级常考4个资格简介及难易程度排序

一、软考高级5个资格 01、网络规划设计师 资格简介&#xff1a;网络规划设计师要求考生具备全面的网络规划、设计、部署和管理能力&#xff1b;该资格考试适合那些在网络规划和设计方面具有较好理论基础和较丰富从业经验的人员参加。 02、系统分析师 资格简介&#xff1a;系统分…...

【18】Word:明华中学-儿童医保❗

目录 题目​ NO2 NO3 NO4 NO5 NO6 NO7 NO8 NO9 题目 NO2 布局→页面设置对话框→纸张方向&#xff1a;横向→纸张大小&#xff1a;A3 &#xff1b;页面设置对话框&#xff1a;直接输入纸张大小的宽度和高度即可→页面设置对话框&#xff1a;上下左右边距→版式&…...

Vue 中实现修改数组,并保持页面渲染数据是响应式更改

如果你在 Vue 中使用数组并希望确保对数组项的修改是响应式的&#xff0c;直接替换数组项可能不会触发 Vue 的响应式更新。为了确保响应式更新&#xff0c;你可以使用 Vue 提供的 Vue.set() 方法&#xff08;在 Vue 2 中&#xff09;或使用 this.$set() 方法&#xff08;在 Vue…...

MATLAB算法实战应用案例精讲-【数模应用】图形变换和复杂图形组合(附python和MATLAB代码实现)

目录 前言 算法原理 变换 1二维变换 1.1缩放 1.2 翻转 1.3剪切 1.4 旋转 2齐次坐标 2.1引入齐次坐标的原因 2.2 二维齐次坐标 2.3二维仿射变换 2.4逆变换 4组合变换 5三维变换(由二维变换推理而来) 5.1三维齐次坐标 5.2 三维仿射变换 5.3 缩放和平移 5.4…...

GCC支持Objective C的故事?Objective-C?GCC只能编译C语言吗?Objective-C 1.0和2.0有什么区别?

GCC支持Objective C的故事 Objective-C 主要由 Stepstone 公司的Brad Cox和 Tom Love 在1980 年左右发明。乔布斯离开苹果公司后成立了NeXT STEP公司&#xff0c; 买下了Objective-C 语言的授权。GCC对Objective-C语言的支持是在1992年加入的&#xff0c;具体是在GCC 1.3版本中…...

自动驾驶占用网格预测

文章目录 需要阅读的文献&#xff1a;github论文仓库论文idea提取BEVFormer 需要阅读的文献&#xff1a; ⭐[ECCV 2024] SparseOcc 纯稀疏3D占用网络和 RayIoU 评估指标 ECCV 2024&#xff5c;OSP&#xff1a;自动驾驶全新建模方法&#xff0c;端到端输出任意位置的占用结果 S…...

1.17组会汇报

STRUC-BENCH: Are Large Language Models Good at Generating Complex Structured Tabular Data? STRUC-BENCH&#xff1a;大型语言模型擅长生成复杂的结构化表格数据吗&#xff1f;23年arXiv.org 1概括 这篇论文旨在评估大型语言模型&#xff08;LLMs&#xff09;在生成结构…...

使用 Ansys Motor-CAD 的自适应模板加速创新

应对现代电机设计挑战 电机设计不断发展&#xff0c;Ansys 正在通过创新解决方案引领潮流&#xff0c;不断突破可能的界限。随着电动汽车、工业自动化和可再生能源系统的快速增长&#xff0c;对优化电机的需求从未如此之高。工程师面临着越来越大的压力&#xff0c;他们需要开发…...

用nginx正向代理https网站

目录 1. 缘起2. 部署nginx3. 测试3.1 http测试3.2 https测试4 给centos设置代理访问外网 1. 缘起 最近碰到了一个麻烦事情&#xff0c;就是公司的centos测试服务器放在内网环境&#xff0c;而且不能直接上外网&#xff0c;导致无法通过yum安装软件&#xff0c;非常捉急。 幸…...

PyTorch使用教程(6)一文讲清楚torch.nn和torch.nn.functional的区别

torch.nn 和 torch.nn.functional 在 PyTorch 中都是用于构建神经网络的重要组件&#xff0c;但它们在设计理念、使用方式和功能上存在一些显著的区别。以下是关于这两个模块的详细区别&#xff1a; 1. 继承方式与结构 torch.nn torch.nn 中的模块大多数是通过继承 torch.nn…...

图论DFS:黑红树

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法&#xff1a;记忆化搜索DFS 算法&#xf…...

StarRocks 怎么让特定的SQL路由到FE master节点的

背景 本文基于 StarRocks 3.1.7 大家都知道对于Starrocks来说 FE 是分 master和follower的&#xff0c;而只有master节点才能对元数据进行写操作。但是为什么呢&#xff1f;哪里有体现呢&#xff1f; 这其中的原因在网上是搜不到的&#xff0c;所以大家只知道只有master节点才…...

蓝桥杯真题 - 公因数匹配 - 题解

题目链接&#xff1a;https://www.lanqiao.cn/problems/3525/learning/ 个人评价&#xff1a;难度 2 星&#xff08;满星&#xff1a;5&#xff09; 前置知识&#xff1a;调和级数 整体思路 题目描述不严谨&#xff0c;没说在无解的情况下要输出什么&#xff08;比如 n n n …...

Java 8 Stream API

文章目录 Java 8 Stream API1. Stream2. Stream 的创建3. 常见的 Stream 操作3.1 中间操作3.2 终止操作 4. Stream 的并行操作 Java 8 Stream API Java 8 引入了 Stream API&#xff0c;使得对集合类&#xff08;如 List、Set 等&#xff09;的操作变得更加简洁和直观。Stream…...

AI刷题-还原原始字符串、大数和中的极值位距离

目录 一、还原原始字符串 问题描述 举例 输入格式 输出格式 输入 输出 输入 输出 输入 输出 输入 输出 输入 输出 输入 输出 数据范围 解题思路&#xff1a; 数据结构选择 最终代码&#xff1a; 运行结果&#xff1a; 二、大数和中的极值位距离 问题…...

Ubuntu20.04取消root账号自动登录的方法,触觉智能RK3568开发板演示

Ubuntu20.04默认情况下为root账号自动登录&#xff0c;本文介绍如何取消root账号自动登录&#xff0c;改为通过输入账号密码登录&#xff0c;使用触觉智能EVB3568鸿蒙开发板演示&#xff0c;搭载瑞芯微RK3568&#xff0c;四核A55处理器&#xff0c;主频2.0Ghz&#xff0c;1T算力…...

MySQL 数据库 :SQL 语句规约(不得使用外键与级联,一切外键概念必须在应用层解决。)

文章目录 I 强制规约表名限定数据订正禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。不得使用外键与级联,一切外键概念必须在应用层解决。使用 ISNULL() 来判断是否为 NULL 值NPE 问题不要使用 count(列名) 或 count(常量) 来替代 count(*)II 建议in 操作能避免则…...

深入理解 SQL 中的 DATEDIFF 函数

深入理解 SQL 中的 DATEDIFF 函数 DATEDIFF 函数在 SQL 中是一个用于计算两个日期之间差值的重要工具。不同数据库实现了不同版本的 DATEDIFF&#xff0c;它们在功能和语法上有所不同。本文将详细解析 DATEDIFF 的用法、数据库间差异、复杂场景中的应用&#xff0c;以及替代方…...

【Linux】15.Linux进程概念(4)

文章目录 程序地址空间前景回顾C语言空间布局图&#xff1a;代码1代码2代码3代码4代码5代码6代码7 程序地址空间前景回顾 历史核心问题&#xff1a; pid_t id fork(); if(id 0) else if(id>0) 为什么一个id可以放两个值呢&#xff1f;之前没有仔细讲。 C语言空间布局图&am…...

KubeSphere部署安装,接入KubeKey安装的k8s集群

KubeSphere安装接入KubeKey安装的k8s集群 文章目录 KubeSphere安装接入KubeKey安装的k8s集群 一.NFS安装配置1.服务器安装NFS服务2.下载并部署 NFS Subdir External Provisioner1).下载部署文件2).创建 NameSpace3).创建 RBAC 资源4).配置 deployment.yaml5).部署 Storage Clas…...

opencv3.4 ffmpeg3.4 arm-linux 交叉编译

一些依赖安装&#xff1a; sudo apt-get install pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev 交叉编译工具链准备&#xff1a;gcc-linaro-6.3.1 1、下载 https://github.com/FFmpeg/FFmpeg 解压后新建目录&#xff1a;Fmpeg-n3.4.13/ffmpeg…...

Java基础(二)

提示:这部分内容对逆向重要,需重点掌握。 1.常见数据类型 1.1 List系列 类似于Python中的列表 List是一个接口,接口下面有两个常见的类型(目的是可以存放动态的多个数据) ArrayList,连续的内存地址存储(内部自动扩容) -> Python列表的特点LinkedList,底层基于链表…...

网络IO与IO多路复用

一、网络IO基础 系统对象&#xff1a; 网络IO涉及用户空间调用IO的进程或线程以及内核空间的内核系统。例如&#xff0c;当进行read操作时&#xff0c;会经历两个阶段&#xff1a; 等待数据准备就绪。将数据从内核拷贝到进程或线程中。 多种网络IO模型的出现原因&#xff1a;…...

C# OpenCvSharp 部署3D人脸重建3DDFA-V3

目录 说明 效果 模型信息 landmark.onnx net_recon.onnx net_recon_mbnet.onnx retinaface_resnet50.onnx 项目 代码 下载 参考 C# OpenCvSharp 部署3D人脸重建3DDFA-V3 说明 地址&#xff1a;https://github.com/wang-zidu/3DDFA-V3 3DDFA_V3 uses the geometri…...

【机器学习实战入门】使用OpenCV进行性别和年龄检测

Gender and Age Detection Python 项目 首先,向您介绍用于此高级 Python 项目的性别和年龄检测中的术语: 什么是计算机视觉? 计算机视觉是一门让计算机能够像人类一样观察和识别数字图像和视频的学科。它面临的挑战大多源于对生物视觉有限的了解。计算机视觉涉及获取、处…...

Android SystemUI——StatusBar视图创建(六)

上一篇文章我们介绍了 StatusBar 的构建过程,在 makeStatusBarView() 中获得 FragmentHostManager,用来管理 StatusBar 的窗口。 一、状态栏视图 在得到 FragmentHostManager 实例对象之后,还会继续调用 addTagListener() 方法设置监听对象,然后获取 FragmentManager 并开…...