SQL查询流程图如下,具体执行过程可以分为取得连接、查询缓存、分析、执行四个阶段:
连接器
通过MySQL的连接器,取得连接。
MySQL基于TCP协议传输,需要先完成三次握手建立连接,校验客户端用户名、密码,校验用户权限后,建立连接。
查询缓存
key为SQL语句,value为查询结果,查询缓存是否命中。
数据库表只要进行更新操作,表的查询缓存就被清空,所以更新比较频繁的表 缓存命中率很低。MySQL8.0之后已经将查询缓存删除。
分析器
词法分析 分析SQL语句关键字。
语法分析 进行语法校验。
构建SQL语法树,后续读取表名、字段等。
执行阶段
预处理
- 检查表、字段等对象是否存在
- 对同名对象进行处理
- 验证数据类型
- 其他操作
优化器
生成执行计划。
- 决定使用哪个索引
- 决定表的连接顺序
执行器
使用当前数据库 存储引擎提供的接口,按照执行计划进行处理。