Skip to content

Latest commit

 

History

History
42 lines (25 loc) · 1011 Bytes

sql_execution_flow.md

File metadata and controls

42 lines (25 loc) · 1011 Bytes

SQL 执行流程

执行流程图

发送请求

客户端安装通信协议将SQL发送至服务端,服务端会使用一个线程执行这个SQL。

通过命令SHOW [FULL] PROCESSLIST可以查看线程的执行状态,查询结果如下

Command列表示线程的执行状态

  • Sleep 等待客户端请求
  • Query 执行查询或发送响应给客户端
  • Locked
  • Sending Data

查询缓存

若SQL以SELECT开始,且符合查询缓存条件,则会查询缓存返回。

查询缓存:MySQL将执行过的语句及结果以K-V形式缓存,K是根据SQL、数据库、版本协议等生成的Hash值。8.0版本弃用

分析SQL

  1. 词法分析。将SQL分析得到多个Token
  2. 语法分析。检查是否满足SQL语法,生成语法树
  3. 预处理。检查表名字段名是否正确
  4. 权限检查。检查权限

SQL优化

将SQL优化得到执行计划

SQL执行

执行器根据执行计划执行SQL,得到结果返回响应