- MySQL基本的架构示意图为
一条查询语句执行的流程为
- 连接器 :链接数据库这个时候接待你的就是mysql的连接器负责跟数据库建立链接,获取权限,维持和管理链接其中需要注意的几个点总结入选
1 MySQL 修改用户权限,下次登录生效
2 连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,你可以在 show processlist 命令中看到它 默认情况下是8个小时自动断开 由参数wait_timeout控制 - 分析器(要做什么): mysql 需要知道你做什么所以在此过程中会对语句进行分析 (其中连接器的部分会触发查询缓存 但是mysql8中已经废弃了缓存)
- 优化器 (怎么做):经过分析器mysql知道要做什么 ,再执行前还需要进行优化器进行处理 理解来说就是怎么做需要注意以下几点
1 优化器是在表里面有多个索引的时候,决定使用哪个索引;
2 在一个语句有多表关联(join)的时候,决定各个表的连接顺序。 - 执行器(do it):通过分析知道了要做什么通过优化器知道了怎么做 就需要再执行器中完成做这个动作 需要注意的几点如下
1 再开始执行的时候会验证当前链接用户的权限
2 执行器会根据表的引擎定义去使用这个引擎提供的接口获取相关数据
3 你会在数据库的慢查询日志中看到一个 rows_examined 的字段,表示这个语句执行过程中扫描了多少行。这个值就是在执行器每次调用引擎获取数据行的时候累加的在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟 rows_examined 并不是完全相同的