架构图
其中 Server 层包括连接器、分析器、查询缓存、优化器、执行器,执行器通过API进行调用不同实现的存储引擎
连接器
负责跟客户端建立连接、获取权限、维持和管理连接
查询缓存
- 查询缓存指的是查询到结果,以查询语句为key,查询结果为value进行缓存起来,下次查询发现相同查询语句,就直接取缓存进行返回。
- 适用场景:静态数据,比如中国国家城市信息,不适合更新频繁的数据,因为更新时需要将缓存清除,更大更新的负担,不建议使用。
- 备注:Mysql 8.0 已经将查询缓存功能删除
分析器
分析器主要包括词法分析和语法分析
- 词法分析主要是识别出里面的字符串分别是什么,代表什么,比如 select 表示开始查询
- 语法分析是将于SQL的语句是否符合语法规则,比如 delete * from t 就会报如下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* from t' at line 1
优化器
优化器的工作主要是为了提升性能进行相关的优化处理,比如:
- 如果有多个索引时,选择哪个索引更加优,或者走二级索引还是走主键索引优等(可能在这阶段会因抽样统计信息不准导致选错索引)
- join 关联时,以哪个表作为基准表会性能更高等
执行器
执行器就是开始执行SQL,但是在开始执行前会检查用户的权限,通过后再调用引擎接口进行操作。举个例子:
--- 创建表
CREATE TABLE t (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255),
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 ;
-- 查询
select * from t where name = 'helloworld';
- 执行器调用存储引擎API获取第一行数据,判断name是否相同,如果不等,忽略,否则放在结果集里面
- 继续调用存储引擎API获取“下一行”,重复第一步,直到没有下一行
- 执行器将结果集返回给客户端
本文参考极客时间的Mysql实战45讲