MySQL 一条语句的执行
本文将介绍 MySQL 中语句的执行过程。
一、一条查询语句的执行
1. 连接并接收请求
略。
2. 缓存查询
服务器会首先查询缓存,如果有缓存,则直接返回;如果没有缓存,则继续执行查询,并将查询结果缓存。
需要注意的是:
查询缓存可以在不同客户端之间共享
客户端 A 查询请求处理完成后,如果客户端 B 发送了相同的查询请求,服务器会直接使用缓存的结果,而不会因为两个客户端不同而重新处理
如果查询请求中包含某些 “容易改变” 的系统函数、自定义变量、自定义函数、系统表,则查询结果不会被缓存
如果查询请求涉及的表发生了结构或数据的改变,则缓存会失效
查询请求虽然能够提升一定的性能,但也会因为维护缓存而产生额外的开销。在 MySQL 8.0 中,查询缓存被删除
3. 语法解析
MySQL 服务器会对请求语句做文本分析、语法分析、信息提取。
4. 语句优化
MySQL 的优化程序会对语句进行优化,生成一个执行计划,包含语句的具体执行方法
例如:
- 确定表的查询顺序
- 确定是否使用索引以及使用什么索引
- 外连接转换为内连接
- 表达式简化
- 子查询转换为连接
5. 执行并返回结果
执行器将根据执行计划,调用存储引擎的接口,获取结果。
参考
- MySQL 技术内幕
- MySQL 实战 45 讲
- MySQL 是怎样运行的:从根儿上理解 MySQL