一条SQL查询语句是如何执行的
10 分钟阅读
•
878 字
+
702 词
参考答案:
- 连接器 :连接器负责跟客户端 建立连接、获取权限、维持和管理连接 。
-
查询缓存
:
MySQL拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以key-value对的形式,被直接缓存在内存中,但是查询缓存这个功能是弊大于利的,当表只要发生更新,那么缓存就完全失效了,所以只适合用在静态表上,在mysql8.0之后,这个功能就被完全移除掉了。 -
分析器
:你输入的是由多个字符串和空格组成的一条
SQL语句,此时需要进行 词法分析和语法分析 。MySQL需要识别出里面的字符串分别是什么,代表什么。 -
优化器
:先有
预处理
阶段,
检查表或者字段是否存在
。优化器是在表里面有多个索引的时候,
决定使用哪个索引
; 或者在一个语句有多表关联(
join)的时候,决定 各个表的连接顺序 。 -
执行器
:
MySQL通过分析器知道了你要做什么 , 通过优化器知道了该怎么做 ,于是就进入了执行阶段与存储引擎开始交互,开始执行语句。
总结:
MySQL
拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以
key-value
对的形式,被直接缓存在内存中。但是实际上对于更新频繁的表来说,查询缓存的命中率很低。所以Mysql8.0版本开始,就将查询缓存删掉了。
3.==解析器(包含在分析器中)==
之后呢是进行解析SQL,这个工作是交给解析器来做的。==
解析器进行词法分析和语法分析
。==
SQL没有语法问题之后然后执行SQL,每条
SELECT
查询语句流程主要可以分为下面这三个阶段:
预处理阶段;优化阶段;执行阶段;
4.==预处理器==
预处理阶段是
检查语句中的表或者字段是否存在
,并将*号扩展为表的所有列。
5.==优化器==
经过预处理阶段后,还需要为 SQL 查询语句先制定一个执行计划
,这个工作交由「优化器」来完成的。==优化器主要负责将 SQL 查询语句的执行方案确定下来==,比如在表里面有多个索引的时候,优化器会基于查询成本的考虑,
来决定选择使用哪个索引
。
6.==执行器==
经历完优化器后,就确定了执行方案,接下来 MySQL 就真正开始执行语句了,这个工作是由「执行器」完成的。在执行的过程中,
执行器就会和存储引擎交互
了,交互是以记录为单位的。