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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值