文章目录
一、逻辑架构
逻辑架构图
1.1 第一层:连接层
客户端访问MySQL服务器前首先要建立TCP连接
三次握手建立连接成功后,MySQL服务器对TCP传输过来的账号密码做 身份认证 、 权限获取
- 用户名或密码不对,会收到一个Access denied for user错误,客户端程序结束执行
- 用户名密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都将依赖于此时读到的权限
1.2 第二层:服务层
- SQL Interface: SQL接口
- 接收用户的SQL命令,并且返回用户需要查询的结果。比如SELECT … FROM就是调用SQL Interface
- Parser: 解析器
- 解析器对SQL语句进行语法、语义分析。将SQL语句分解为数据结构
- SQL接口将SQL命令传进解析器时,将其解析并创建
语法树
,会根据数据字典丰富查询语法树 - 创建好语法树后,MySQL还会对SQl查询进行语法上的优化,进行查询重写。
- Optimizer: 查询优化器
- SQL语句在语法解析之后、查询之前会使用查询优化器确定SQL语句的执行路径,生成一个
执行计划
- 执行计划表明应该
使用哪些索引
进行查询,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询 - Caches & Buffers: 查询缓存组件
- 查询缓存将缓存一条SELECT语句执行的结果,如果
两次查询语句完全一样
就命中缓存,不用再去存储文件里查了 - 注意:查询缓存必须两条语句完全一样才会命中
- 在MySQL5.7.20开始,不推荐使用查询缓存,在MySQL 8.0中删除
1.3 第三层:引擎层
插件式存储引擎层( Storage Engines