Mysql——一条SQL语句的执行流程

一、Mysql的体系结构

架构图:

Mysql的体系结构主要分为以下几层:

1. Connectors 连接层:负责处理客户端的请求连接。

  • 系统在访问Mysql的服务器之前会先与服务器建立TCP连接,连接成功后Mysql会对TCP传输过来的用户信息做权限验证。

2. MySQL Server服务层

  • Connection Pool 链接池:负责处理和存储客户端与mysql服务器之间的链接。其中一个线程处理一个链接。
  • SQL Interface(SQL 接口):接受客户端的SQL,如DML、DDL、存储过程、视图、触发器等。
  • Parser(解析器):SQL传到解析器后会被解析、验证、优化。将SQL语句分解为数据结构并创建语法树,根据数据字典查询语法树,验证客户端的操作权限,创建好语法树后还会对语法进行优化。
  • Optimizer (查询优化器):在SQL语法解析后确定SQL的执行路径,生成执行计划(是否使用索引以及使用哪些索引,表之间的连接顺序)
  • Service & utilities (服务治理&工具集):包括Backup & Restore(数据备份和还原)、Security(安全)、Replication(复制)、Cluster(聚簇)、Partitioning(分区)、Workbench(工作台)等等集群管理服务和工具。
  • Caches 缓存等模块:用来缓存一条SELECT语句的执行结果,如果能够在其中找到对应的查询结果,那么就不必再进行查询解析、优化和执行的整个过程了,直接将结果反馈给客户端。(Mysql8.0后已删除)

3. 引擎层:Mysql支持插件式存储引擎

几种常见的存储引擎:

  • InnoDB: Mysql默认的存储引擎,支持事务、支持行锁、支持外键
  • MyISAM: 不支持事务、不支持外键,支持表锁
  • Memery: 支持哈希索引,数据存储在内存中

4. 存储层

文件的物理存储层,包括日志文件、数据等。

二、sql语句的执行流程

1、第一步:建立连接,在执行sql语句前,客户端首先需要mysql服务端建立连接,mysql是基于TCP协议进行传输的,所以需要先经历TCP的三次握手来建立连接。连接建立成功后,连接器会对用户名、密码进行校验。校验通过获取到用户权限后保存权限信息便于后续操作的权限判断。
2、第二步:查询缓存(mysql8.0之后已废弃),mysql服务端接收到sql后会先对SQL语句的第一个字段进行解析,如果是select会先进入到缓存模块查找缓存数据,缓存中数据是以key-value形式存储的,其中key就是sql语句,value就是返回值,如果缓存命中就直接返回缓存值。否则执行操作后把结果再写入缓存中。
3、第三步:解析sql,mysql中的解析器会对sql进行解析,包括词法解析,解析出语句中的关键字,语法解析,根据语句规则判断是否符合语法然后构建一个语法树。
4、第四步:执行sql,首先进入预处理阶段对表和字段进行判断,预处理后查询优化器会对sql语句制定一个执行计划,比如确定索引。优化器处理后就是执行器,根据索引选择执行方式,如(主键索引查询、全表查询、索引下推等)到存储引擎中获取到数据后返回给客户端。

相关推荐
indexsunny3 小时前
互联网大厂Java求职面试实战:Spring Boot微服务与Redis缓存场景解析
java·spring boot·redis·缓存·微服务·消息队列·电商
无心水3 小时前
【分布式利器:腾讯TSF】7、TSF高级部署策略全解析:蓝绿/灰度发布落地+Jenkins CI/CD集成(Java微服务实战)
java·人工智能·分布式·ci/cd·微服务·jenkins·腾讯tsf
28岁青春痘老男孩8 小时前
JDK8+SpringBoot2.x 升级 JDK 17 + Spring Boot 3.x
java·spring boot
方璧8 小时前
限流的算法
java·开发语言
元Y亨H8 小时前
Nacos - 服务注册
java·微服务
曲莫终8 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言
ruleslol8 小时前
MySQL的段、区、页、行 详解
数据库·mysql
天若有情6738 小时前
校园二手交易系统实战开发全记录(vue+SpringBoot+MySQL)
vue.js·spring boot·mysql
一心赚狗粮的宇叔9 小时前
中级软件开发工程师2025年度总结
java·大数据·oracle·c#
Learn-Python9 小时前
MongoDB-only方法
python·sql