
连接层
Tcp链接收到之后,会分配一个线程和客户端进行一对一的链接,所以还会有一个线程池,去走后面的流程,每一个连接从线程池中获取线程,省去了创建和销毁的开销
经过三次握手之后,MySQL会对tcp连接传过来的账号进行身份验证,获取权限
连接层主要负责认证,管理连接,获取权限信息
服务层
这一层完成大多数核心功能能,如SQL接口,并完成缓存的查询,sql分析和优化 ,服务器会解析查询并生成解析树,并完成优化,如果是SELECT 语句还会进行缓存
引擎层
插件式的存储引擎架构将查询处理和其他的系统任务,数据库的存储分开了,这种架构可以根据需要选择适合的存储引擎
存储层
数据和结构具体的物理存储
sql的执行流程
查询缓存
连接建立后,执行查询语句的时候,会先查询缓存,MySQL 会先校验这个 sql 是否执行过,以 Key-Value 的形式缓存在内存中,Key 是查询预计,Value 是结果集。如果缓存 key 被命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。
MySQL 查询不建议使用缓存,因为查询缓存失效在实际业务场景中可能会非常频繁,假如你对一个表更新的话,这个表上的所有的查询缓存都会被清空。对于不经常更新的数据来说,使用缓存还是可以的。
所以,一般在大多数情况下我们都是不推荐去使用查询缓存的。
MySQL 8.0 版本后删除了缓存的功能,官方也是认为该功能在实际的应用场景比较少,所以干脆直接删掉了。
解析器
第一步,词法分析,一条 SQL 语句有多个字符串组成,首先要提取关键字,比如 select,提出查询的表,提出字段名,提出查询条件等等。做完这些操作后,就会进入第二步。
第二步,语法分析,主要就是判断你输入的 sql 是否正确,是否符合 MySQL 的语法
优化器
优化器的作用就是生成它认为的最优的执行方案去执行(有时候可能也不是最优)比如多个索引的时候该如何选择索引,多表查询的时候如何选择关联顺序等。
执行器
当选择了执行方案后,MySQL 就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果。
