MySQL执行流程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本文介绍了MySQL的执行流程,分为server层和引擎层。server层包含连接器、查询缓存、解析器、预处理器、优化器等组件,负责SQL的接收、解析、优化及执行;引擎层负责数据的存储与读取。文章详细解释了各组件的功能,如连接器负责用户身份认证,查询缓存提高查询效率,解析器进行SQL的词法和语法分析,预处理器验证表和字段的存在性,优化器选择最优执行计划,最终由查询执行引擎完成查询并将结果返回给客户端。

理解mysql整个执行流程,对sql调优是有帮助的,我们先看一张流程图

MySQL主要分为server层与引擎层

server层:连接器,查询缓存,解析器,预处理器,优化器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog日志模块。

引擎层:主要负责数据的存储读取。

连接器

主要负责用户登录数据库,进行用户的身份认证,包括校验账户密码,权限等操作,如果用户账户密码已通过,连接器会到权限表中查询该用户的所有权限,之后在这个连接里的权限逻辑判断都是会依赖此时读取到的权限数据,也就是说,后续只要这个连接不断开,即时管理员修改了该用户的权限,该用户也是不受影响的。

查询缓存

建立连接后,MySQL会先查询缓存。Mysql会先校验这个sql是否执行过,以Key-Value的形式缓存在内存中,Key是查询语句,Value是结果集。如果缓存key被命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。

当查询语句中有一些不确定的数据时,则不会被缓存。例如包含函数NOW()或者CURRENT_DATE()的查询不会缓存。包含任何用户自定义函数,存储函数,用户变量,临时表,mysql数据库中的系统表或者包含任何列级别权限的表,都不会被缓存。有一点需要注意,MySQL并不是会因为查询中包含一个不确定的函数而不检查查询缓存,因为检查查询缓存之前,MySQL不会解析查询语句,所以也无法知道语句中是否有不确定的函数**。事实则是,如果查询语句中包含任何的不确定的函数,那么其查询结果不会被缓存,因为查询缓存中也无法找到对应的缓存结果。**

解析器

如果缓存没有,那么就到解析器这边,进行词法,语法分析

词法分析

词法分析会把sql语句打散为一个个单词。

sql

代码解读

复制代码

select name from user where id = 1;

比如上面语句,会打散8个字符

语法分析

语法分析会对 SQL 做一些语法检查,比如单引号有没有闭合,然后根据 MySQL 定义的语法规则,根据 SQL 语句生成一个数据结构。这个数据结构我 们把它叫做解析树。

解析树图:

预处理器

经过词法语法分析之后,如何保证sql语句中的表,字段是否存在呢?预处理器就是做这件事情的。预处理器也是在解析环节,预处理之后得到一个新的解析树。

查询优化器

查询优化器会将解析树转化成执行计划。一条查询可以有多种执行方法,最后都是返回相同结果。优化器的作用就是找到这其中最好的执行计划。

查询执行引擎

在解析和优化阶段,MySQL将生成查询对应的执行计划,MySQL的查询执行引擎根据这个执行计划来完成整个查询。这里执行计划是一个数据结构,而不是和其他的关系型数据库那样生成对应的字节码。

返回结果给客户端

 如果查询可以被缓存,那么MySQL在这个阶段页会将结果存放到查询缓存中。

 MySQL将结果集返回给客户端是一个增量、逐步返回的过程。在查询生成第一条结果的时候,就已经向客户端逐步返回结果。


转载来源:https://juejin.cn/post/6844904083594166285

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 存储 缓存
mysql执行过程
mysql执行过程
47 3
|
7月前
|
SQL 存储 缓存
MySQL - 一条SQL在MySQL中是如何被执行的?
MySQL - 一条SQL在MySQL中是如何被执行的?
|
7月前
|
SQL 关系型数据库 MySQL
Mysql更新语句执行流程
Mysql更新语句执行流程
|
存储 SQL 缓存
场景应用:MySQL一条查询语句执行流程
场景应用:MySQL一条查询语句执行流程
|
缓存 关系型数据库 MySQL
【Mysql系列】(一)MySQL语句执行流程(下)
【Mysql系列】(一)MySQL语句执行流程(下)
|
关系型数据库 MySQL Java
【Mysql系列】(一)MySQL语句执行流程(上)
【Mysql系列】(一)MySQL语句执行流程
|
SQL 监控 关系型数据库
【MySQL进阶-10】mysql语句的执行流程以及集群的高可用
【MySQL进阶-10】mysql语句的执行流程以及集群的高可用
148 0
|
SQL 存储 缓存
【MySQL从入门到精通】【高级篇】(五)MySQL的SQL语句执行流程
今天正式进入核心知识点的学习,本文主要介绍MySQL中SQL的执行流程。熟悉SQL的执行流程对后期数据库的优化至关重要。话不多说直接进入今天的学习。
234 0
【MySQL从入门到精通】【高级篇】(五)MySQL的SQL语句执行流程
|
SQL 缓存 关系型数据库
MySQL语句执行过程
MySQL语句执行过程
|
SQL 存储 缓存
从查询语句执行流程看MySQL架构
从查询语句执行流程看MySQL架构
224 0
从查询语句执行流程看MySQL架构