查询语句的执行流程如下:权限校验(如果命中缓存)--->查询缓存--->分析器--->预处理器---->优化器--->权限校验--->执行器--->引擎
1、连接数据库
- 通过连接器,客户端与服务器三次握手建立TCP连接
- 建立连接后,效验用户名和密码
- 用户名密码正确后,读取用户权限
2、去查询缓存里查找缓存数据,如果查询语句命中缓存则会直接返回value给客户端。
查询缓存在一个表有update时候会清空,所以很鸡肋,mysql8.0删除了
3、解析器进行词法和语法分析
4、预处理器检查查询语句的表或者字段是否存在,以及将select * 的 * 扩展为所有的列
5、优化器确定查询语句的执行方案,可以使用explain + sql语句查看执行计划
6、执行器根据执行计划执行sql语句并返回结果给客户端