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语句制定一个执行计划,比如确定索引。优化器处理后就是执行器,根据索引选择执行方式,如(主键索引查询、全表查询、索引下推等)到存储引擎中获取到数据后返回给客户端。

相关推荐
Ai 编码助手几秒前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
P.H. Infinity2 分钟前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天6 分钟前
java的threadlocal为何内存泄漏
java
caridle18 分钟前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻19 分钟前
MySQL排序查询
数据库·mysql
^velpro^23 分钟前
数据库连接池的创建
java·开发语言·数据库
苹果醋327 分钟前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
秋の花31 分钟前
【JAVA基础】Java集合基础
java·开发语言·windows
小松学前端34 分钟前
第六章 7.0 LinkList
java·开发语言·网络
Wx-bishekaifayuan41 分钟前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava