MySQL 的基础 一 (连接池, SQL接口, 查询解析器, 查询优化器, 存储引擎接口, 执行器)

news2024/11/13 12:13:44

目录

1  MySQL数据库的连接池

2  网络连接必须让线程来处理

3  SQL接口:负责处理接收到的SQL语句

4  查询解析器:让MySQL能看懂SQL语句

5  查询优化器:选择最优的查询路径

6  调用存储引擎接口,真正执行SQL语句

7  执行器:根据执行计划调用存储引擎的接口


1  MySQL数据库的连接池

当多个系统访问同一个数据库时,每个系统会通过数据库连接池创建多个连接供多线程使用。同样,MySQL 也需要维护与这些系统的多个连接。因此,MySQL 架构的第一个环节是连接池,它负责维护这些连接。同时,每次系统连接 MySQL 时,MySQL 都会根据提供的账号和密码进行身份验证,并检查库表权限。

2  网络连接必须让线程来处理

当数据库服务器的连接池中的某个连接接收到网络请求(如一条 SQL 语句)时,谁负责监听并处理这个请求呢?

其实,网络连接的处理需要分配给一个线程。这个线程负责监听网络请求,并从连接中读取数据,随后解析并执行 SQL 语句。如果你熟悉计算机的基础知识,就会知道线程在这种情况下是关键,它负责从网络连接中读取请求并进行处理,如下图所示。

3  SQL接口:负责处理接收到的SQL语句

MySQL 内部首先提供了一个 SQL 接口(SQL Interface)组件,它专门用于执行我们发送给 MySQL 的增删改查 SQL 语句。当工作线程接收到 SQL 语句后,会将其交给 SQL 接口处理并执行。SQL 接口负责将这些请求转化为 MySQL 能理解的操作,如下图所示。

4  查询解析器:让MySQL能看懂SQL语句

当我们执行一个 SQL 语句,例如:

SELECT id, name, age

FROM users

WHERE id = 1;

人脑可以立刻理解它的含义:查询 users 表中 id 等于 1 的那行数据,并提取 id, name, age 三个字段。然而,MySQL 是一个数据库管理系统,不能直接理解这些 SQL 语句。

因此,查询解析器(Parser) 就显得非常重要。它负责解析 SQL 语句,将其分解为 MySQL 可以理解的操作步骤。以这个查询为例,查询解析器会将 SQL 拆解为以下几个部分:

  1. 要从 users 表中查询数据。
  2. 查询条件是 id 等于 1。
  3. 返回的结果应包括 id, name, age 三个字段。

SQL 解析 就是根据 SQL 语法规则解析并理解 SQL 语句的含义,明确这条语句的操作目的,如下图所示。

5  查询优化器:选择最优的查询路径

当解析器理解了 SQL 语句的目标后,接下来由 查询优化器(Optimizer) 来选择一个最优的查询路径,以确保查询执行效率最高。

让我们继续使用之前的例子:

SELECT id, name, age FROM users WHERE id = 1;

解析器已经理解到这是要从 users 表中找到 id 等于 1 的记录,并提取 id, name, age 三个字段。接下来,优化器就会根据不同的查询路径,选择最优的执行方案。以下是两个简单的路径示例(仅用于理解,并非实际 MySQL 机制):

路径 1:直接定位到 users 表中 id 等于 1 的那行数据,然后提取 id, name, age 三个字段。这通常是通过索引快速定位数据的方式,速度更快。
路径 2:遍历整个 users 表,逐行读取每条记录的 id, name, age,然后过滤出 id 等于 1 的那行数据。这个路径效率较低,因为需要扫描整个表。


虽然这两种路径都可以完成查询,但显然第一种路径更快、更高效。因此,查询优化器 的任务就是为你写的 SQL 语句生成一棵查询路径树,然后选择其中执行效率最高的一条路径。

通过选择最优路径,MySQL 会更高效地执行 SQL 语句,相当于优化器在后台帮你决定了以什么顺序和步骤完成查询,从而提高了整体查询性能。

6  调用存储引擎接口,真正执行SQL语句

最后一步是将查询优化器选择的最优查询路径,也就是 SQL 语句的执行计划,交给 MySQL 的底层 存储引擎 来执行。这是 MySQL 架构设计中一个非常重要且有特色的部分。

我们可以思考一下,SQL 语句执行的最终目的就是访问和操作数据。那么,数据究竟存放在哪里呢?

在 MySQL 中,数据既可能存放在内存中,也可能存放在磁盘文件中。具体来说:

  • 如果数据经常被访问,可能会被缓存在内存中,以便快速读取。
  • 较大的数据文件或冷数据则通常存放在磁盘中,通过存储引擎负责读取和写入。

存储引擎是 MySQL 系统与底层数据存储之间的接口,它负责管理数据的物理存储和检索。不同的存储引擎(如 InnoDB、MyISAM 等)具有不同的特性,决定了数据如何存储、更新、查询和处理。

现在我们知道 SQL 语句的执行步骤,但问题在于:如何确定哪些数据在内存中,哪些数据在磁盘上?当我们执行 SQL 语句时,是更新内存中的数据,还是直接更新磁盘上的数据?如果要更新磁盘上的数据,又是如何找到具体的磁盘文件并进行更新呢?

这时,存储引擎 就起到了关键作用。存储引擎负责具体的执行操作,包括查询内存缓存、更新磁盘数据、查询磁盘数据等。它按照一定的逻辑流程来处理数据,决定是否需要从磁盘中读取数据、将数据加载到内存中、或者在必要时更新磁盘中的数据。

存储引擎执行的流程可能如下:

  1. 首先检查数据是否已经在内存缓存中,如果是,则直接在内存中操作,避免频繁的磁盘读写。
  2. 如果数据不在内存中,存储引擎会从磁盘文件中读取相关数据,将其加载到内存中供查询或更新使用。
  3. 当需要更新数据时,存储引擎可能先更新内存中的缓存数据,然后根据策略(如事务提交或定期刷新)将数据写入磁盘。

存储引擎在执行这些操作时,还涉及到如何高效管理缓存、如何保持数据的一致性、以及如何在磁盘上优化读写性能。因此,它在整个 MySQL 的 SQL 语句执行过程中扮演了核心的角色。

MySQL的架构设计中,SQL接口、SQL解析器、查询优化器其实都是通用的,他就是一套组件而已。

但是存储引擎的话,他是支持各种各样的存储引擎的,比如我们常见的InnoDB、MyISAM、Memory等等,我们是可以选择使用哪种存储引擎来负责具体的SQL语句执行的。

目前,InnoDB 是 MySQL 默认且最常用的存储引擎,它支持事务、外键和行级锁,能够更好地满足现代数据库系统的需求。至于每种存储引擎的工作原理和内部机制,我们可以在后续深入分析,不必急于理解。

7  执行器:根据执行计划调用存储引擎的接口

在 MySQL 中,存储引擎负责处理数据的存取操作,比如访问内存和磁盘上的数据。然而,存储引擎并不会直接运行 SQL 语句,真正执行 SQL 语句的是 执行器

执行器 的作用是根据查询优化器生成的执行计划,调用存储引擎的接口,按步骤执行 SQL 语句的逻辑。执行器负责调度和控制 SQL 的执行流程,确保语句按照最优路径被正确执行。

例如,对于以下 SQL 语句:

SELECT id, name, age FROM users WHERE id = 1;

执行器的工作流程可能是这样的:
1. 执行器首先调用存储引擎的接口,从 `users` 表中获取第一行数据。
2. 执行器检查该行数据的 `id` 是否等于 1。
3. 如果 `id` 不等于 1,则执行器继续调用存储引擎接口,获取下一行数据。
4. 一旦找到 `id = 1` 的那行数据,执行器会提取 `id`, `name`, `age` 并返回结果。

执行器会不断调用存储引擎的接口,依次进行数据的读取、判断、过滤和操作,直至 SQL 语句的执行计划完全执行完毕。

通过执行器的调度,SQL 语句的执行顺序得以实现,确保每一步操作按照优化器的方案高效执行。

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

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

相关文章

UE4_后期处理_后期处理材质及后期处理体积三—遮挡物体描边显示

一、效果: 在很多游戏中为了玩家能看到墙面背后是否有敌人,会给被遮挡的敌人增加描边显示,效果如下: 参考: https://zhuanlan.zhihu.com/p/81310476 https://zhuanlan.zhihu.com/p/358140547 二、所需知识 知识点…

数据结构与算法学习day20-二叉树的最大深度、最小深度、完全二叉树的节点个数、平衡二叉树、二叉树所有路径

一、二叉树的最大深度 1.题目 104. 二叉树的最大深度 - 力扣(LeetCode) 2.思路 2.1递归法 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)二叉树节点的高度…

安卓玩机工具------vivo机型线刷救砖固件 下载工具操作步骤预览

vivo机型玩机 vivo机型虽然对于玩家来说相对可玩性较低。官方封闭bl锁。对于普通玩家来说只能 中规中矩使用机型。但目前有很多vivo机型通过第三方渠道已经可以解bl锁和root操作。但有时候玩机会遇到误操作或者其他系统性问题导致系统瘫痪不开机。 那么我们就需要具备一些救砖…

Linux网络——Socket编程函数

一.网络命令 1.ping ping命令用来检测网络是否连通,具体用法为: ping 任意网址 结果如下: 当出现上述字段时,证明网络是连通的,这里值得注意的是,ping命令执行之后会不断进行网络检测,不会停…

Linux——网络基础Socket编程

目录 一计算机网络背景 二协议 1初始协议 1.1协议分层 1.2OSI七层模型 1.3TCP/IP五层模型 2再始协议 2.1为什么要有TCP/IP协议 2.2TCP/IP与OS的关系 2.3所以什么是协议 三网络传输基本流程 1局域网(以太网)通信原理 1.1认识mac地址 2同…

【软件设计师真题】下午题第一大题---数据流图设计

解答数据流图的题目关键在于细心。 考试时一定要仔细阅读题目说明和给出的流程图。另外,解题时要懂得将说明和流程图进行对照,将父图和子图进行对照,切忌按照常识来猜测。同时应按照一定顺序考虑问题,以防遗漏,比如可以…

综合案例-数据可视化-地图

一、pyecharts—地图快速入门 假设我们要将6个地区的某种数量在地图上标注出来,首先导入pyecharts包内地图相关模块,然后准备地图数据(数据类型是列表,列表的元素类型为元组),然后把准备好的数据添加进地图…

Java笔试面试题AI答之单元测试JUnit(1)

文章目录 1. 什么是JUnit?2. JUnit的重要特征是什么?3. 什么是单元测试案例?单元测试的特点:单元测试的好处:编写单元测试案例的步骤: 4. 何时在开发周期中编写单元测试?5. 为什么不直接使用Sys…

【鸿蒙开发从0到1 day07】

ArkTS-基础语法 一.开发环境1.下载Dev Eco Stdio2.下载chinese插件3.基础入门4.输出语句5.注释 二.3种常见的数据类型1.数据类型2.储存数据(1)变量:专门用来存储数据的容器(可变)(2)常量(3)命名规则 三.数组四.函数1.无参函数2.有参函数3.返回值4.箭头函数 五.对象六.总结 一.开…

HBuilderx中vue页面引用scss样式

scss为css样式的预编译器,引入了变量、嵌入、混合、集成、引入等功能,相对于css样式,实现了样式的编程,具有更灵活的样式编写模式。 那么在HBuilderx中,“.vue”格式页面如何调用scss样式呢?详细如下&#…

每日一练7:简写单词(含链接)

1.链接 简写单词_牛客题霸_牛客网 2.题目 3.代码1&#xff08;错误经验&#xff09; #include <iostream> #include <string> using namespace std;int main() {string s;string ret;int count 0;while(cin >> s)for(auto a : s){if(count 0){if( a <…

字符串操作的高效工具—正则表达式

字符串操作的高效工具—正则表达式 一 . 概述1.1 认识正则表达式1.2 正则表达式体验案例 二 . 使用2.1 字符类2.2 逻辑运算符2.3 预定义字符2.4 数量词2.5 分组括号2.6 字符串中常用含有正则表达式的方法 正则表达式&#xff08;Regular Expression&#xff0c;简称 regex 或 r…

xcode打包报错之 zip fail / copy fail

在xcode中archive打包中&#xff0c;遇到提示zip fail或者copy fail&#xff0c;此时请清理你电脑的缓存文件了&#xff0c;但凡遇到这两种报错&#xff0c;是编译时运行内存不够导致的&#xff0c;请及时查看并清理你的电脑。 如下&#xff1a; 将对应的缓存或者垃圾清理&am…

春日美食汇:基于SpringBoot的订餐平台

2 系统关键技术 2.1JSP技术 JSP(Java脚本页面)是Sun和许多参与建立的公司所提倡的动态web技术。将Java程序添加到传统的web页面HTML文件()。htm,。Html) [1]。 JSP这种能够独立使用的编程语言可以嵌入在html语言里面运行&#xff0c;正因为JSP参照了许多编程语言的特性&#xf…

C++——类与对象(二)

目录 引言 类的默认成员函数 构造函数 1.构造函数的概念 2.注意事项 初始化列表 1.初始化列表的概念 2.注意事项 析构函数 1.析构函数的概念 2.注意事项 拷贝构造函数 1.拷贝构造函数的概念 2.注意事项 运算符重载 1.运算符重载的概念 2.注意事项 赋值运算符…

食家巷桃酥:一口酥脆,回味悠长

在众多的传统糕点中&#xff0c;食家巷桃酥以其独特的魅力脱颖而出&#xff0c;成为了许多人心中的美味记忆。初见食家巷桃酥&#xff0c;那金黄的色泽便让人食欲大增。每一块桃酥都像是一件小小的艺术品&#xff0c;散发着诱人的香气。它的外形饱满&#xff0c;边缘微微隆起&a…

JVM 调优篇1 类的加载器与加载过程

一 基本知识 1.1 JIT&AOT JIT: Just Time compilation 即时编译器 在程序运行时将字节码或中间表示转换为机器代码。 AOT: Ahead of Tmie Compilation &#xff1a; 预编译 在程序运行之前将高级语言代码完全编译成机器代码。 1.2 字面量和符号引用* 字面量&am…

安卓下载工具箱_3.8.1/去浏览器跳转登录就是会员

下载工具箱app是一款支持56种下载协议的安卓万能下载工具,下载工具箱最新版主要提供网络视频解析下载,资源嗅探下载,以及本地视频扫描提取功能,同时提供不常见的视频编辑功能,例如:智能清洗,高帧率/码率等 链接: https://pan.baidu.com/s/1pW0CgmGv9bmzGkBA4rV2oQ?pwdxdby …

群晖NAS安装alist

官方文档&#xff1a;https://alist.nn.ci/zh NAS参考&#xff1a;https://post.smzdm.com/p/an9zpvev/ Windows安装&#xff1a;alist-windows-amd64.zip 手机参考&#xff1a;https://studylessshape.github.io/post/note/alist-install-for-android/ 质感文件可以不用安&…

Science|癌症中三级淋巴结构的免疫调节作用与治疗潜力|顶刊精析·24-09-08

小罗碎碎念 Science文献精析 今天精析的这一篇综述&#xff0c;于2022-01-07发表于Science&#xff0c;主要讨论了癌症中的三级淋巴结构&#xff08;Tertiary Lymphoid Structures, TLS&#xff09;及其在肿瘤免疫反应中的作用。 作者类型作者姓名单位名称&#xff08;中文&…