Mysql底层执行过程及基于PK的“数据跳跃”

Mysql底层执行过程

当MySQL收到一个查询,特别是像 WHERE id = ? 这样的基于主键的查询时,它可以高效地找到所需的数据。以下是基于InnoDB存储引擎(MySQL的默认存储引擎)进行查询的底层过程:

  1. 解析查询: MySQL首先会解析查询,确定正在查询的表以及需要访问的索引。

  2. 查找聚集索引: 在InnoDB中,PRIMARY KEY 是一个聚集索引,意味着数据物理上按照主键值存储。

  3. 查找索引条目: MySQL开始通过主键索引查找数据。它首先查找B+树的根节点,这通常保存在内存中,因此非常快。

  4. 遍历B+树: MySQL然后沿着B+树结构遍历,从根节点开始,然后到中间节点,最后到叶子节点。每一步都是通过比较键值来确定下一步应该跟随哪个指针。这样的结构设计是为了使深度尽可能小,通常只需要几步就能找到所需的键值。

    举个例子:假设有一个B+树,根节点有三个键值:10, 20, 30。如果查询的ID是15,那么MySQL会选择键值10和20之间的指针,进入下一个中间节点或叶子节点。叶子节点通常来说不仅仅存储一条记录哦!

  5. 找到数据页: 当MySQL到达B+树的叶子节点时,它就找到了存储该记录的数据页(在InnoDB中,叶子节点实际上就是数据页)。

  6. 读取数据页: 一旦确定了数据页的位置,MySQL从磁盘(或者如果这个页已经在缓冲池中则从内存)中读取这个数据页。

  7. 返回结果: 当MySQL通过B+树索引找到了数据页后,它还需要在该页内搜索到具体的记录。但由于页内记录是有序的,这个查找过程也是非常快速的。

在上述过程中,“跳过”的概念实际上是指:在B+树结构中,由于索引的有序性和树的层次结构,MySQL可以迅速确定不包含所需数据的路径和数据页,从而只访问相关的数据页。


数据跳跃

作者总结:mysql的数据跳跃只是体现在B+树搜索叶子节点的过程中。

  1. B+树的搜索MySQL的B+树索引使其能够快速地定位到正确的数据页,这一步是通过跳跃完成的。从根节点开始,沿着索引结构向下,直到找到叶子节点(数据页)。这种结构的优点是,无论数据量有多大,定位到数据页所需的磁盘I/O操作都是相对固定的,因为B+树的高度是有限的。

  2. 页内搜索:一旦MySQL定位到了正确的数据页,它就需要在页内进行搜索以找到具体的记录。这是一个顺序搜索,但由于数据页的大小是固定且相对较小的(例如,16KB),并且页内的记录是有序的,所以这个搜索过程是非常迅速的。

所以,确实,MySQL的"数据跳跃"主要体现在B+树结构的利用上,而数据页内的搜索是顺序的但也非常高效。

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

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

相关文章

后端实现大文件分片上传

项目框架 net6 webapi 放开上传大小限制 放开代码 | 框架层限制 在 Program.cs 文件中添加如下代码 不然会出现下面的限制错误 From表单限制:Failed to read the request form. Multipart body length limit 134217728 exceeded 请求体超长:Request bo…

pytorch:Model模块专题

一、说明 关于pytorch使用中,模块扮演重要校色,大部分功能不能密集展现,因此,我们这个文章中,将模块的种种功能详细演示一遍。 二、模块 PyTorch使用模块来表示神经网络。模块包括: 有状态计算的构建块。…

Win10中Pro/E鼠标滚轮不能缩放该怎么办?

Pro/E安装好后,鼠标滚轮不能缩放模型,该怎么办?问题多发生在win8/win10上,新装了PROE,发现滑动鼠标中键不能放大缩小。 彩虹图纸管理软件_图纸管理系统_图纸文档管理软件系统_彩虹EDM【官网】彩虹EDM图纸管理软件系统…

【PyQt】调整子控件的层级以调整绘制的先后顺序

简述 qt中貌似没有直接设置z序的函数,但对应的有其他调整z序的方法: QWidget.raise_():置顶 QWidget.lower():置底 QWidget.stackUnder(wid):置于指定控件之下 其中关键函数是QWidget.stackUnder(wid),利…

Python---使用turtle模块+for循环绘制五角星---利用turtle(海龟)模块

首先了解涉及的新词汇,编程外国人发明的,所以大部分是和他们语言相关,了解对应意思,可以更好理解掌握。 import 英 /ˈɪmpɔːt/ n. 进口,进口商品;输入,引进;重要性;…

【Unity】3D跑酷游戏

展示 finish_all * 方块跑酷 1.教程链接 翻墙:https://www.youtube.com/watch?v9ZEu_I-ido4&listPLPV2KyIb3jR53Jce9hP7G5xC4O9AgnOuL&index3 2.基础制作 最终成果 2.1 基本场景 1.创建Cube作为跑道 1)记得把位置Reset; 2&#…

Linux部署Redis Cluster高可用集群(附带集群节点添加删除以及槽位分配操作详解)

目录 一、前言二、下载安装Redis2.1、选择需要安装的Redis版本2.2、下载并解压Redis2.3、编译安装Redis 三、部署Redis Cluster高可用集群3.1、准备配置文件3.2、启动Redis服务3.3、创建Redis集群3.4、查看集群关系3.5、连接集群Redis进行数据读写以及重定向测试3.6、故障转移和…

使用Scala和Sttp库编写爬虫程序

以下是一个使用Scala和Sttp库编写的视频爬虫程序,该程序使用了proxy来获取IP。请注意,这个示例需要在上找到一个具体的视频链接,然后将其传递给crawlVideo函数。 import scala.util.{Failure, Success} import scala.concurrent.{Future, Ex…

基于计算机视觉的坑洼道路检测和识别-MathorCup A(深度学习版本)

1 2023 年 MathorCup 高校数学建模挑战赛——大数据竞赛 赛道 A:基于计算机视觉的坑洼道路检测和识别 使用深度学习模型,pytorch版本进行图像训练和预测,使用ResNet50模型 2 文件夹预处理 因为给定的是所有图片都在一个文件夹里面&#xf…

react h5 发版白屏问题解决方案

背景&#xff1a;h5应用每次发布之后会有部分用户白屏 React v5 1. 优化路由加载时间 app.jsx render() {if(this.state.loading) {return <PendingPage />}return (<Router><Suspense fallback{<PendingPage />}>{this.state.showPage ?<Switch…

通过zookeeper浅谈一致性算法

CAP定理介绍 CAP 定理指的是在一个分布式系统中&#xff0c;Consistency&#xff08;一致性&#xff09;、 Availability&#xff08;可用性&#xff09;、Partition tolerance&#xff08;分区容错性&#xff09;&#xff0c;三者不可兼得。 通俗来说&#xff1a; 一致性&…

安信可小安派AiPi 代码下载

安信可小安派AiPi 代码下载笔记记录 AiPi 代码下载&#xff08;直接使用命令行操作&#xff0c;仅需要Type-C接口线即可&#xff09; 在完成环境搭建&#xff0c;和代码编写前提下&#xff0c;使用Type-C接口线下载代码&#xff0c;当然可以自己使用usb-ttl串口线下载程序&am…

g++入门教程

g入门教程 目录 g入门教程 1.g简介 2.命令格式 3.命令选项 4.FAQ 4.1编译选项疑问 4.1.1-Wno-unknown-pragmas和-Wno-format -pg 4.2链接注意事项 4.2.1指定静态与动态的链接方式 本文章向大家介绍g入门教程&#xff0c;主要内容包括其使用实例、应用技巧、基本知识点…

4.6 static修饰符

static是一个修饰符&#xff0c;用于修饰类的成员属性和成员方法&#xff0c;还可以编写static代码块来优化程序性能。 1. static修饰属性 在Java程序中使用static修饰属性&#xff0c;则该属性称为静态属性&#xff08;也称全局属性&#xff09;&#xff0c;静态属性可以使用…

SQL server 代理服务启动和查看

设置重启 使用管理员权限登录到运行 SQL Server 代理服务的计算机。 打开 Windows 服务管理器。可以通过按下 Windows 键 R&#xff0c;然后键入 "services.msc" 并按 Enter 来打开服务管理器。 在服务列表中&#xff0c;找到 "SQL Server Agent" 服务&…

回归算法|长短期记忆网络LSTM及其优化实现

本期文章将介绍LSTM的原理及其优化实现 序列数据有一个特点&#xff0c;即“没有曾经的过去则不存在当前的现状”&#xff0c;这类数据以时间为纽带&#xff0c;将无数个历史事件串联&#xff0c;构成了当前状态&#xff0c;这种时间构筑起来的事件前后依赖关系称其为时间依赖&…

解决:谷歌浏览器访问http时,自动转https访问的问题

问题背景&#xff1a;某个系统网站&#xff0c;之前一直用https域名访问&#xff0c;现在改成http域名后&#xff0c;用http访问&#xff0c;谷歌浏览器会自动跳转到https。 解决方法&#xff1a; 在浏览器中输入网址&#xff1a;chrome://net-internals/#hsts -》 在“Delete…

解决git action定时任务执行失败的方法

为了测试git action定时任务是否有效&#xff0c;你可能选择一个最近的时间测试&#xff0c; 但是发现怎么也触发不了&#xff0c;是不是觉得很苦恼。但是同样的时间&#xff0c;在第二天的定时任务又能成功运行。 这是什么原因&#xff1f; 原因就在上图&#xff0c;git act…

多测师肖sir_高级金牌讲师__接口测试之tonken (5.6)

接口测试之tonken 网站&#xff1a;http://shop.duoceshi.com/login?redirect2Fdashboard 第一个接口&#xff1a;uiid接口 uiid接口url&#xff1a;http://manage.duoceshi.com/auth/code test中语句&#xff1a; var jsonData JSON.parse(responseBody); postman.setEnvi…

NewStarCTF2023week4-溯源

题目描述是冰蝎进行WebShell连接的流量包&#xff0c;我们需要找到攻击者获取到的服务器用户名和服务器内网IP地址。 先介绍一下常见webshell工具的流量特征&#xff1a; 1、中国菜刀 请求体中存在eval、base64等特征字符&#xff1b; 连接过程中使用base64编码对发送的指令…