MySQL 执行查询流程

​1. 客户端通过 TCP 连接发送连接请求到 MySQL 连接器,连接器会对该请求进行权限验证及连接资源分配。

连接器的作用:

  • 负责与客户端通信,但是它是半双工模式,所以只能由客户端向服务器发送请求或者服务器响应客户端,两者不能同时进行。
  • 验证请求用户的账号和密码是否有误,如果验证通过,会在 MySQL 自带的权限中查询当前用户的权限。

​2. 查询缓存

当判断缓存是否命中时,MySQL 不会进行解析查询语句,而是直接使用 SQL 语句和客户端发送过来的其他原始信息。所以,任何字符上的不同,例如空格、注解等都会导致缓存的不命中。如果无法命中缓存,就继续走到分析器的这一步,如果命中缓存就直接返回给客户端。

3. 通过分析器进行语法分析。

通过分析器将客户端发送的 SQL 语句进行分析,这一过程包括预处理和解析过程。 解析 SQL 语句的语义,进行关键字(select/update/delete/whiere 等)和非关键词的提取、解析,组成一个解析树。如果语法错误,客户端出现异常“ERROR:You have an error in your SQL syntax.”除了校验语法,还会检查数据表和数据库是否存在,别名是否存在歧义等校验。

4. 优化器进行优化。

此阶段主要是进行SQL语句的优化,会根据具体情况进行最优的选择,判断是否使用索引,以及选择合适的索引,生成执行计划。

5. 交给执行器,调用存储引擎的 API 将数据保存到结果集中,同时会逐步将数据缓存到查询缓存中,最终将结果集返回给客户端。

MySQL 执行查询流程_第1张图片

SQL 的执行顺序:

SQL 是按照固定的顺序解析的,而不是按照书写顺序从前往后执行的。主要的作用就是从上一个阶段的执行返回结果来提供给下一阶段使用,SQL在执行的过程中会有不同的临时中间表,一般是按照如下顺序:from -> on -> join -> where -> goup by -> having + 聚合函数 -> select -> order by -> limit

活动地址:CSDN21天学习挑战赛

你可能感兴趣的:(数据库,java,mysql,数据库)