首先来看一张很经典的图

连接层


Connectors:即为连接层,我们在访问MySQL服务前,第一件事就是建立TCP链接,经过三次握手建立连接成功后,MYSQL对TCP传输过来的账号密码做身份认证、权限获取。TCP链接收到请求后,必须要分配给一个线程专门与客户端进行交互,所以还有个线程池,每一个链接从线程池中获取线程,省去了创建和销毁线程的开销。

服务层

SQL Interface(SQL接口,用来接受用户的SQL命令,并返回需要的结果。

Parser(解析器)
用户传过来的SQL语句会在解析器中被解析,分为语法解析,和语义解析,并创建语法树,并根据数据字典丰富查询语法树,在解析器里还会去验证客户端是否具有执行该语句的权限。创建好语法树后,MYSQL还会对SQL查询进行语法上的优化,进行查询重写。

Optimizer(查询优化器)
SQL语句在语法解析之后,查询之前会使用查询优化器确定SQL语句的执行路径,生成一个执行计划,这个执行计划表明使用哪些索引进行查询。

Caches & Buffers(查询缓存组件)
MySQL内部维持着一些Cache和Buffer,比如Query Cache用来缓存一条SELECT语句的执行结
果,如果能够在其中找到对应的查询结果,那么就不必再进行查询解析、优化和执行的整个过
程了,直接将结果反馈给客户端。
这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等 。
这个查询缓存可以在 不同客户端之间共享 。
从MySQL 5.7.20开始,不推荐使用查询缓存,并在 MySQL 8.0中删除 。

引擎层

真正负责MYSQL中数据的存储和提取,对磁盘数据执行操作。

简述:
连接层:用户与MYSQL服务进行TCP链接,校验用户身份,用户权限。
服务层:用户写的SQL语句会到服务层进行解析,生成语法树。优化SQL语句,生成执行计划。
引擎层:真正与磁盘进行交互,对数据进行存储和读取。