执行流程图
发送请求
客户端安装通信协议将SQL发送至服务端,服务端会使用一个线程执行这个SQL。
通过命令SHOW [FULL] PROCESSLIST
可以查看线程的执行状态,查询结果如下
Command
列表示线程的执行状态
- Sleep 等待客户端请求
- Query 执行查询或发送响应给客户端
- Locked
- Sending Data
查询缓存
若SQL以SELECT
开始,且符合查询缓存条件,则会查询缓存返回。
查询缓存:MySQL将执行过的语句及结果以K-V形式缓存,K是根据SQL、数据库、版本协议等生成的Hash值。8.0版本弃用
分析SQL
- 词法分析。将SQL分析得到多个Token
- 语法分析。检查是否满足SQL语法,生成语法树
- 预处理。检查表名字段名是否正确
- 权限检查。检查权限
SQL优化
将SQL优化得到执行计划
SQL执行
执行器根据执行计划执行SQL,得到结果返回响应