Mysql - 一条sql的基本执行流程

一、前置条件

在理解sql执行流程之前,需要先了解一下mysql的基本架构及常用组件功能,可以参考https://www.jianshu.com/p/ac140e8549fd

二、sql执行的基本步骤

sql的执行过程一般会通过客户端和服务端,因此在大面上分为

1、建立连接
如何建立连接?

a. 客户端通过mysql指令发起建立连接的请求

b. 通过3次握手后与mysql服务端建立连接

c. 服务端连接器收到请求后验证用户名、密码进行身份验证、鉴权,如果验证通过,那么服务端连接器将会缓存身份信息、鉴权信息,之后该连接的sql执行都是基于当前缓存中的权限信息执行

2、执行sql

a. 客户端发起sql执行请求。

b. 服务端通过连接器接受到sql执行请求,传递给查询缓存。

c. 请求经过查询缓存,如果有命中缓存,那么直接返回缓存结果(以sel开头的sql语句才会经过查询缓存。mysql8.0取消了查询缓存)。

d. 查询缓存没有命中,那么说明本次sql还需要继续执行,因此就要对sql进行解析,看看sql语法、词法是否合法,分析器就是干这个事儿的,所以此时就到了分析器了,分析器除了对sql的语法、词法进行分析外,同时也会生成sql id,如果sql不合法,那么就会终止sql执行,将异常结果返回给客户端。如果合法,那么就会将请求传递给优化器。

e. 优化器拿到分析器的sql后,会对sql进行优化,选择索引、重写查询,同时生成sql执行计划。将sql交给执行器。

f. 执行器拿到sql之后,通过表设置的存储引擎,调用存储引擎提供的读写接口由存储引擎执行sql,存储或查询数据,最后返回执行结果。

未完待续.....

你可能感兴趣的:(Mysql - 一条sql的基本执行流程)