mysql 一条语句在mysql完整的执行过程

Mysql 三层架构

  1. 客户端连接层:负责处理客户端的连接、身份验证和权限管理。

  2. 服务层 (Server层):MySQL的核心,负责SQL的解析、优化、执行等所有跨存储引擎的功能。

  3. 存储引擎层:负责数据的实际存储和读取。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条件),最终将结果集返回给客户端

 

核心逻辑:

image

 

 

 

  

posted @ 2023-06-25 09:21  方达达  阅读(3)  评论(0)    收藏  举报