title: “SQL语句在MySQL中的执行流程” date: 2022-02-25T15:28:58+08:00 draft: false
1 基本架构概述
2 组件介绍
2.1 连接器
连接器主要和身份认证和权限相关的功能相关,主要负责用户登录数据库,进行用户的身份认证,包括校验账户密码,权限等操作。
值得注意的是,身份认证和权限校验这些操作,连接器会去数据库权限表中查询该用户的所有权限,之后只要连接不中断,后面的所有SQL语句都会以连接中的权限去执行,及时我们修改了权限。
2.2 查询缓存
查询缓存主要用来缓存我们所执行的 SELECT 语句以及该语句的结果集。
连接建立后,执行查询语句时,会先去查询缓存,MySQL会先校验这个SQL是否执行过,以 Key-Value 的形式缓存在内存中。如果 Key 被命中,则直接返回给客户端,如果没有命中,则执行后续操作后把结果缓存起来。
MySQL 8.0 版本后删除了这个缓存功能,可能是因为查询缓存失效在实际业务场景中可能会非常频繁,例如我们对一个表执行更新操作,那么这个表的所有查询缓存都会失效。
2.3 分析器
分析器主要用来分析 SQL 语句是来干嘛的,它有这些步骤:
- 词法分析:提取一条SQL语句中的关键子,如:SELECT、查询的表、字段名、查询条件;
- 语法分析:判断SQL语句是否正确,符合语法。
2.4 优化器
优化器的作用就是它认为的最优的执行方案去执行,比如多个索引的时候该如何选择索引,多表查询的时候如何选择关联顺序等。
2.5 执行器
当选择了执行方案后,MySQL 就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果。
|