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

news2025/1/19 21:06:54

文章目录

  • 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. 在对应的组中进行遍历,最终获取到数据。

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

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

相关文章

新阿里云买服务器配置需手动配置80端口

新买阿里云服务器需手动配置80&#xff0c;端口才可以访问nginx CentOS系统 安装nginx 1. 安装 Nginx yum install nginx 2. 启动 Nginx 服务 systemctl start nginx 3. 修改默认网页 cd /usr/share/nginx/ echo "666" >index.html cat index.html 访问ngin最后…

机器学习——什么是代价函数? 下

“上次课讲了机器学习的模型表示,讲了一个线性模型的例子,那怎样在可能的拟合直线里选择一条最合适的呢?有没有数学的方法让这个直线合适还是不合适变得可以量化呢?这就要说代价函数了。” 本次课前半段内容非常简单,带领我们一起复习初中平面几何的知识,后半段给出了代价…

LeetCode - #187 Swift 实现重复的DNA序列

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

ReactiveReactor Core

Reactive&Reactor Core 一、概述1、问题2、优势3、发展 二、Reactive Streams1、依赖2、API 三、Project Reactor1、概述2、并发模型3、入门1、依赖2、Flux和Mono3、空流&错误流 4、订阅响应式流1、常见订阅2、自定义订阅 5、API1、index2、timestamp3、any4、map5、fi…

STL容器-- list的模拟实现(附源码)

STL容器-- list的模拟实现&#xff08;附源码&#xff09; List的实现主要考察我们对list这一容器的理解&#xff0c;和代码的编写能力&#xff0c;通过上节对list容器的使用&#xff0c;我们对list容器已经有了一些基本的了解&#xff0c;接下来就让我们来实现一些list容器常见…

【转】厚植根基,同启新程!一文回顾 2024 OpenHarmony 社区年度工作会议精彩瞬间

在数字化浪潮奔腾不息的今天&#xff0c;开源技术已成为推动科技创新与产业发展的强大引擎。2025年1月10日-11日&#xff0c;OpenAtom OpenHarmony&#xff08;开放原子开源鸿蒙&#xff0c;以下简称“OpenHarmony”或“开源鸿蒙”&#xff09;社区2024年度工作会议于深圳盛大启…

蓝桥杯备考:堆和priority queue(优先级队列)

堆的定义 heap堆是一种特殊的完全二叉树&#xff0c;对于树中的每个结点&#xff0c;如果该结点的权值大于等于孩子结点的权值&#xff0c;就称它为大根堆&#xff0c;小于等于就叫小根堆&#xff0c;如果是大根堆&#xff0c;每个子树也是符合大根堆的特征的&#xff0c;如果是…

力扣682

from typing import Listclass Solution:def calPoints(self, operations: List[str]) -> int:a [] # 用于存储有效得分的列表for op in operations:if op.isdigit() or (op[0] - and op[1:].isdigit()): # 如果是整数&#xff08;包括负数&#xff09;a.append(int(op)…

考研计算机组成原理——零基础学习的笔记

第一章 研究计算机硬件的学科。 1.计算机系统概述 计算机系统硬件软件&#xff08;系统软件&#xff1a;比如操作系统、数据库管理系统、标准程序库等&#xff0c;应用软件&#xff1a;QQ等&#xff09; 1.2计算机的层次结构 1.2.1计算机硬件的基本组成 冯诺伊曼计算机&a…

海康工业相机的应用部署不是简简单单!?

作者&#xff1a;SkyXZ CSDN&#xff1a;SkyXZ&#xff5e;-CSDN博客 博客园&#xff1a;SkyXZ - 博客园 笔者使用的设备及环境&#xff1a;WSL2-Ubuntu22.04MV-CS016-10UC 不会吧&#xff1f;不会吧&#xff1f;不会还有人拿到海康工业相机还是一脸懵叭&#xff1f;不会还有人…

计算机网络 (49)网络安全问题概述

前言 计算机网络安全问题是一个复杂且多维的领域&#xff0c;它涉及到网络系统的硬件、软件以及数据的安全保护&#xff0c;确保这些元素不因偶然的或恶意的原因而遭到破坏、更改或泄露。 一、计算机网络安全的定义 计算机网络安全是指利用网络管理控制和技术措施&#xff0c;保…

STM32 FreeRTOS中断管理

目录 FreeRTOS的中断管理 1、STM32中断优先级管理 2、FreeRTOS任务优先级管理 3、寄存器和内存映射寄存器 4、BASEPRI寄存器 5、FreeRTOS与STM32中断管理结合使用 vPortRaiseBASEPRI vPortSetBASEPRI 6、FromISR后缀 7、在中断服务函数中调用FreeRTOS的API函数需注意 F…

操作系统 期末重点复习

操作系统 期末重点复习 必会 课后题摘要 第二章&#xff1a; 在操作系统中为什么要引入进程概念&#xff1f;它会产生什么样的影响? 为了使程序在多道程序环境下能并发执行&#xff0c;并对并发执行的程序加以控制和描述&#xff0c;在操作系统中引入了进程概念。影响: 使程…

7.5.4 MVCC优化测试

作者&#xff1a; h5n1 原文来源&#xff1a; https://tidb.net/blog/4e02d900 1. 背景 由于MVCC 版本数量过多导致rocksdb扫描key数量过多影响SQL执行时间是tidb经常出现问的问题&#xff0c;tidb也一直在致力于优化该问题。 一些优化方式包括比&#xff1a; (1) 从传统…

2024年AI与大数据技术趋势洞察:跨领域创新与社会变革

目录 引言 技术洞察 1. 大模型技术的创新与开源推动 2. AI Agent 智能体平台技术 3. 多模态技术的兴起:跨领域应用的新风口 4. 强化学习与推荐系统:智能化决策的底层驱动 5. 开源工具与平台的快速发展:赋能技术创新 6. 技术安全与伦理:AI技术的双刃剑 7. 跨领域技…

vulnhub靶场【Lampiao靶机】,主要考察提权,脏牛提权

前言 靶机&#xff1a;lampiao&#xff0c;IP地址为192.168.10.11 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.2 都采用虚拟机&#xff0c;网卡为桥接模式 该靶机目前只剩下一个了&#xff0c;之前记得是有两台构成系列的。 文章中涉及的靶机&#xff0c;来源于v…

ASP .NET Core 学习(.NET9)配置接口访问路由

新创建的 ASP .NET Core Web API项目中Controller进行请求时&#xff0c;是在地址:端口/Controller名称进行访问的&#xff0c;这个时候Controller的默认路由配置如下 访问接口时&#xff0c;是通过请求方法&#xff08;GET、Post、Put、Delete&#xff09;进行接口区分的&…

构建core模块

文章目录 1.环境搭建1.sunrays-common下新建core模块2.引入依赖&#xff0c;并设置打包常规配置 2.测试使用1.启动&#xff01;1.创建模块2.引入依赖3.application.yml 配置MySQL和Minio4.创建启动类5.启动测试 2.common-web-starter1.目录2.WebController.java3.结果 3.common…

VRTK4 记录抓取错误

左手原本可以正常抓取&#xff0c;但是当右手拿起一个物体时&#xff0c;左手抓取右手的线性驱动器&#xff0c;只有部分区域可以抓取 原因是左手的判定物体的层级错误 应该在Collections下&#xff0c;之前错误的和Collections同一层级&#xff0c;导致抓取有时可以有时不可以…

游戏画质升级史的思考

画质代入感大众玩家对游戏的第一印象与评判标准 大众玩家还没到靠游戏性等内在因素来评判游戏的程度。 画面的重要性&#xff0c;任何时候都不能轻视。 行业就是靠摩尔定律来推动进步的。 NS2机能达到PS4到PS4PRO之间的水准&#xff0c;5050达到8G显存&#xff0c;都会引发连…