mysql 一条语句在mysql完整的执行过程
Mysql 三层架构
-
客户端连接层:负责处理客户端的连接、身份验证和权限管理。
-
服务层 (Server层):MySQL的核心,负责SQL的解析、优化、执行等所有跨存储引擎的功能。
- 存储引擎层:负责数据的实际存储和读取。MySQL支持插件式存储引擎,最常用的是InnoDB。
以一条简单的查询 SELECT name, age FROM users WHERE id = 100;为例:
1、建立连接与身份验证 (连接器)
客户端(如命令行、Navicat)通过TCP协议与MySQL服务器建立连接,连接器负责验证用户名和密码。验证通过后,连接器会读取该用户的所有权限,并在整个连接生命周期内使用
2、查询缓存 (仅限MySQL 8.0之前)
MySQL会检查内存中是否缓存了完全相同的SQL语句及其结果集。
-
命中:直接将缓存结果返回给客户端,流程结束。
-
未命中:继续执行后续步骤,并将查询结果存入缓存。
注意:查询缓存功能在MySQL 8.0中已被移除。因为它失效非常频繁(表有更新就会清空缓存),弊大于利。
3、解析与预处理 (分析器 & 预处理器)
-
解析器 (Parser):对SQL语句进行词法分析(拆分成关键字、表名等“单词”)和语法分析(检查SQL是否符合语法规则),生成一棵解析树 (Parse Tree)。若SQL有语法错误,会在此步报错。
- 预处理器 (Preprocessor):对解析树进行语义检查,比如验证表名、列名是否存在,以及是否有歧义等。
4、生成执行计划 (优化器)
优化器是整个流程的“大脑”。它会根据解析树和表的统计信息(如索引、数据分布),从多种可能的执行路径中,选择它认为成本最低的执行计划。
关键决策包括:
-
选择索引:在有多个索引可用时,决定使用哪个索引。
- 决定多表连接顺序:对于 JOIN 查询,决定先连接哪个表
5、执行并返回结果 (执行器 & 存储引擎)
- 执行器 (Executor):根据优化器生成的执行计划,调用存储引擎的API接口来执行查询。
-
存储引擎 (Storage Engine):以InnoDB为例,它负责真正的数据读写。它会先检查缓冲池 (Buffer Pool) 中是否已有数据。(若有:直接使用缓存数据。若无:从磁盘加载数据页到缓冲池)
注意:执行器获取到数据行后,可能还会进行进一步过滤(如WHERE条件),最终将结果集返回给客户端
核心逻辑:


浙公网安备 33010602011771号