MySQL的体系结构与SQL的执行流程
文章目录
- 前言
- 体系结构
- SQL语句的执行流程
- 1、连接MySQL
- 2、查询缓存
- 3、解析SQL语句
- 4、优化SQL语句
- 5、执行SQL语句
- 总结
前言
如果你在使用MySQL时只会写sql语句的,那么你应该看一下《MySQL优化的底层逻辑》。如果你只了解到sql是如何优化的,那么你应该通过本文了解一下Mysql的体系结构以及sql语句的执行流程。
体系结构
先来看下MySQL的体系结构,下图是在MySQL官方网站上扒下来的,所以有很高的权威性和准确性。

通过这张图,我们可以直观的看到MySQL的内部结构,包括连接器、缓存、解析器、优化器、存储引擎以及支持DDL、DML、存储过程、视图等功能的SQL接口。接下来,通过一条sql语句的执行来深入了解MySQL各个组件功能以及其作用。
SQL语句的执行流程
1、连接MySQL
通常我们会编写sql语句通过某个客户端来执行并且接受执行结果,比如命令行、JDBC、navicat。但是在执行前肯定需要先和MySQL服务成功建立连接,这个就是「连接器」的工作。
这里通过命令行的方式MySQL服务建立连接,命令如下:
mysql -h127.0.0.1 -uroot -p
命令连接的是本地的MySQL服务,在输入密码后,连接器会验证用户和密码,如果验证失败会给客户端响应拒绝访问的信息。

验证成功后,连接器会与该客户端成功建立连接并且读取该用户的权限,用户之后的操作都会基于权限进行控制。
那么用户名和密码以及权限在哪存储呢?
在MySQL中,除了开发人员创建的业务库,还有支撑自己运行的系统库,包括mysql、sys、perfermance_schema、information_schema,用户信息就存储在mysql这个库。

当然,MySQL的连接数也是有限制的,这个可以通过max_connections参数控制。
MySQL [mysql]> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 1215 |
+-----------------+-------+
也可以通过 show processlist 查看当前连接的客户端。
MySQL [mysql]> show processlist;
+------+------+-----------------+-------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+------+-----------------+-------+---------+------+----------+------------------+
| 1156 | root | 127.0.0.1:61223 | mysql | Query | 0 | starting | show processlist |
+------+------+-----------------+-------+---------+------+----------+------------------+
2、查询缓存
当成功建立连接后,客户端就可以向MySQL服务发送sql语句了,「SQL接口」就像我们写的Controller一样会接收到sql语句,如果是 select 语句,将会去「缓存」中检索结果响应给客户端。
有些博客的说法是在解析后才查询缓存,这种说法是不严谨的,这里抛出官方的说明“如果收到相同的语句,服务器将从查询缓存中检索结果,而不是解析并再次执行该语句”

同时在该说明中可以看到“从MySQL 5.7.20开始,查询缓存已被弃用,并在MySQL 8.0中被删除。”这个注释。按照官方的说法是“缓存只适用于表数据不会经常变动的场景,如果表数据经常更新(很明显大多是这个场景),缓存命中率低下,加上频繁的维护缓存,有时候造成的问题比解决的问题还要多,缓存的功能就显得比较鸡肋了。”
3、解析SQL语句
在经过缓存后,就由「解析器」开始工作了,解析器的目的是检查sql语句是否正确以及将sql语句解析成MySQL能够理解的结构,也就是sql语法树。
像 select1 id from table1 这条sql语句就会在解析时报错,因为没有识别到 select 这个关键字(对列名、表名的检查和验证是在预处理阶段)。

而像 select id from table1 这条sql语句会被解析成下图:

如果想了解具体的解析过程可以参考这篇博客
4、优化SQL语句
通过解析器生成sql语法树后就到了「优化器」阶段了,sql如何执行、使不使用索引、使用哪个索引都是在这个阶段处理,《MySQL优化的底层逻辑》中有写到,这里不过多赘述。
5、执行SQL语句
经过「优化器」后最终生成一个最优的执行计划交给「执行器」来执行,执行器通过调用「存储引擎」的接口来获取数据,这里先不展开执行器与存储引擎的交互,后面的文章会详细阐述一下。
总结
至此,一条查询语句的执行流程已经非常清晰了,同时也认识了MySQL的整个体系结构以及各组件的作用。最后用一张图来收尾本文的核心内容并做总结。

一条查询SQL语句的执行流程:
- 客户端通过连接器连接MySQL服务。
- 连接成功后向SQL接口发送SQL语句请求。
- SQL接口接收到SQL查询语句会先去缓存查询,如果命中返回给客户端,否则交给解析器。
- 解析器在拿到SQL语句后会判断语法是否正确,正确会生成sql语法树交给优化器,否则报错给客户端。
- 优化器会根据sql语法树生成一个最优的执行计划交给执行器执行。
- 执行器拿到执行计划调用存储引擎来获取数据响应给客户端。
- 完成!!!
相关文章:
MySQL的体系结构与SQL的执行流程
文章目录 前言体系结构SQL语句的执行流程1、连接MySQL2、查询缓存3、解析SQL语句4、优化SQL语句5、执行SQL语句 总结 前言 如果你在使用MySQL时只会写sql语句的,那么你应该看一下《MySQL优化的底层逻辑》。如果你只了解到sql是如何优化的,那么你应该通过…...
数学建模之拟合及其代码
发现新天地,欢迎访问Cr不是铬的个人网站 引言 与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合…...
GeoTrust SSL数字安全证书介绍
一、GeoTrust OV证书的介绍 GeoTrust OV证书是由GeoTrust公司提供的SSL证书,它是一种支持OpenSSL的数字证书,具有更高的安全性和可信度。GeoTrust是全球领先的网络安全解决方案提供商,为各类用户提供SSL证书和信任管理服务。GeoTrust OV证书…...
【C++上层应用】5. 文件和流
文章目录 【 1. 打开文件 】1.1 open 函数1.2 open 多种模式的结合使用 【 2. 关闭文件 】【 3. 写入 & 读取文件 】【 4. 文件位置指针 】 和 iostream 库中的 cin 标准输入流和 cout 标准输出流类似,C中另一个库 fstream 也存在文件的读取流和标准写入流。fst…...
JAVA爬虫1 - HttpClient的使用
一、简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的 项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit…...
NX二次开发UF_CSYS_map_point 函数介绍
文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_map_point Defined in: uf_csys.h int UF_CSYS_map_point(int input_csys, double input_point [ 3 ] , int output_csys, double output_point [ 3 ] ) overview 概述 Ma…...
Spring Web MVC
目录 一.简介 二.建立连接(客户端和服务器) 三.请求 1.传递单个参数 2.传递多个参数 3.对象 4.数组/集合 5.JSON 6.URL参数 7.上传文件 8.获取cookie和session (1)获取cookie (2)获取session …...
Debian系列的Linux发行版上部署wvp
Debian系列的Linux发行版上部署wvp 环境搭建1.Debian系列的Linux发行版上安装nginx2.安装mysql设置mysql密码修改权限sudo mysql ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)配置相关navicat 连接不上 报错 10061navicat 连接报错 1130 -…...
无人智能柜:经营成本低,运维智能化
在现代商业领域中,无人智能柜正逐渐崭露头角,成为一种具有前景的商业模式。其独特之处在于经营成本的低廉性和运维过程的智能化。相较于传统的便利店等实体店铺,无人智能柜在运营过程中不仅能够降低成本,还能够实现高效的运维管理…...
java.lang.UnsupportedOperationException 关于Arrays.asList问题解决
解析String 字符串为List集合ArrayList<String> itemsList Arrays.asList(items.split("\\|")List<String> itemsList Arrays.asList(items.split("\\|")final Iterator<String> iterator itemsList.iterator();while (iterator.hasNex…...
2023.11.23 云服务器实现 Spring Boot 项目文件上传并访问
环境介绍 云服务器:京东云云服务器系统: CentOS 7.9JDK 版本:1.8Spring Boot 版本:2.7.17 具体步骤 步骤一 首先我们得先创建一个 Spring Boot 项目 创建如下目录结构 关于如何创建一个 Spring Boot 项目 请点击下方链接详细了解 …...
SAP实现多个统御科目:特殊总账SGL+备选统驭科目Alternative Reconciliation Accounts
以前只知道特别总账。学习了 客商的每个公司视图主数据唯一分配一个统驭科目。一般情况下,客商经常发生的业务对应的总帐科目设为统驭科目。 客户设置的统驭科目:应收账款 供应商设置的统驭科目:应付账款 除了经常的销售和采购业务对应应收和…...
【数据分享】2023年我国省市县三级的瞪羚企业数量(免费获取/Excel/Shp格式)
企业是经济活动的参与主体。一个城市的企业数量决定了这个城市的经济发展水平!比如一个城市的金融企业较多,那这个城市的金融产业肯定比较发达;一个城市的制造业企业较多,那这个城市的制造业肯定比较发达。 之前我们给大家分享了…...
用于计算机屏幕安全摄像头系统:Screen Anytime Crack
Screen Anytime 是一款软件,旨在自动将整个用户会话或 PC/服务器/VM/Kiosk 的 /RDP/Citrix/RemoteApp 会话的屏幕活动记录到视频日志文件中,以用于记录、审核和监控目的。通过重播其高度压缩的视频,您可以轻松回顾单台计算机或一组服务器/PC …...
Redis深入理解-Socket连接建立流程以及文件事件处理机制
Redis Server 运行原理图 Redis 服务器中 Socket 网络建立以及文件事件模型 一个 redis 单机,可以抗几百上千的并发,这里的并发指的就是同时可以有几百个 client 对这个 redis server 发起请求,都需要去建立网络连接,同时间可能会…...
Docker run 命令
docker run :创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS说明: -a stdin:指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR三项; -d:后台运行容器&am…...
Vue中的$nextTick的作用
在 Vue 中,当某些数据发生变化时,DOM 并不会立即更新。相反,Vue 会在下一个事件循环周期(microtask)中异步执行更新,这样可以避免频繁的 DOM 操作。然而,有时候我们需要在 DOM 更新后执行一些操…...
浅谈Linux bash脚本----getopts获取脚本POSIX标准传参
getopts是一个在 Shell 脚本中用于解析命令行选项的内置命令。 它用于处理脚本的参数,使得脚本可以接受不同的选项和参数,并根据用户提供的输入采取相应的操作。 getopts 命令基于 POSIX 标准,并且通常与 while 循环结合使用。它的语法如下…...
PyCharm玩转ESP32
想必玩ESP32的童鞋都知道Thonny,当然学Python的童鞋用的更多的可能是PyCharm和VsCode Thonny和PyCharm的对比 对于PyCharm和VsCode今天不做比较,今天重点说一下用PyCharm玩转ESP32,在这之前我们先对比下Thonny和PyCharm的优缺点 1、使用Tho…...
uniapp自定义导航栏返回按键
目录 htmljscss最后 html <!-- #ifdef MP-WEIXIN || APP-PLUS --> <view class"tc header":style"topBarHeight() 0 ? : height: topBarHeight() px;padding-top: topBarTop() px"><view class"reg180" :style"top…...
GoFr框架:加速微服务开发的Go语言利器
目录 一、核心特性:简化微服务开发的五大支柱 1.1 零配置启动与约定优于配置 1.2 全栈可观测性:日志、追踪、指标一体化 1.3 多数据源支持与弹性扩展 二、技术架构:分层设计与模块化组件 三、未来展望:持续演进的云原生生态…...
部署与可视化系统:边缘设备部署:YOLOv8 量化 + NCNN 在树莓派 5 上实时检测
写在前面:当你必须用一块“卡片电脑”跑实时AI推理 如果你拿到过树莓派5,大概率经历过这样的心理路线图: 开机那一刻:“哇,这么小的板子,跑个完整桌面都行!” 装上PyTorch之后:“等等,加载个YOLOv8模型怎么要两分钟?” 真正跑推理的时候:“一秒一帧?PPT都比这流畅…...
BMS测试效率翻倍:基于TSMaster和DBC文件,快速配置你的ADBMS/LTC系列AFE模拟器
BMS测试效率翻倍:基于TSMaster和DBC文件快速配置AFE模拟器实战指南 在新能源汽车和储能系统开发中,电池管理系统(BMS)的测试验证一直是耗时费力的关键环节。传统手工测试不仅效率低下,更难以覆盖复杂的故障场景。本文将分享一套经过实战验证的…...
Elasticsearch-Kopf核心功能解析:集群监控、索引管理与快照备份全攻略
Elasticsearch-Kopf核心功能解析:集群监控、索引管理与快照备份全攻略 【免费下载链接】elasticsearch-kopf web admin interface for elasticsearch 项目地址: https://gitcode.com/gh_mirrors/el/elasticsearch-kopf Elasticsearch-Kopf是一款功能强大的El…...
TwinMarket:多智能体强化学习与博弈论的双市场模拟框架解析
1. 项目概述:当AI智能体遇上“双市场”博弈最近在开源社区里,一个名为TwinMarket的项目引起了我的注意。它来自FreedomIntelligence这个组织,名字本身就很有意思——“双市场”。乍一看,你可能会联想到经济学里的双边市场…...
如何用PyMICAPS将复杂气象数据转化为专业图表?
如何用PyMICAPS将复杂气象数据转化为专业图表? 【免费下载链接】PyMICAPS 气象数据可视化,用matplotlib和basemap绘制micaps数据 项目地址: https://gitcode.com/gh_mirrors/py/PyMICAPS 面对海量气象观测数据,你是否曾为如何将它们直…...
别再乱分析时序了!用set_case_analysis给Design Compiler/PrimeTime做个‘场景假设’
数字IC设计中的时序分析利器:set_case_analysis实战指南 在数字IC设计流程中,时序分析是确保芯片功能正确性的关键环节。然而,当设计复杂度上升,特别是涉及多时钟域、多工作模式时,传统的时序分析往往会陷入"数据…...
agent-browser总是启动失败?DevToolsActivePort ?深入排查解决错误的完整指南
一场从头到尾的实战排查,带你彻底搞懂agent-browser 在 Windows 上的启动问题 agent-browser:——2026最火最屌的浏览器自动化工具 关于openclaw-skills的介绍,这篇讲得不错,推荐: OpenClaw最强Agent Skills推荐&…...
保姆级教程:用Canvas和Web Audio API给个人音乐播放器加个酷炫波形图
从零打造音乐播放器波形图:Canvas与Web Audio的实战指南 音乐播放器的视觉体验往往被忽视,但一个动态响应的波形图能让你的作品瞬间脱颖而出。想象一下,当用户点击播放按钮,随着旋律起伏的不仅是音符,还有屏幕上跳动的…...
Win11下用官方工具制作Ubuntu 20.04安装U盘,为什么比第三方更稳?
Win11下用官方工具制作Ubuntu 20.04安装U盘的三大核心优势 在Windows 11环境下为Ubuntu 20.04制作安装U盘时,多数教程会推荐Rufus等第三方工具。但鲜为人知的是,Ubuntu官方提供的解决方案在安全性和兼容性上有着不可替代的优势。本文将深入解析官方工具链…...
