编辑
2026-01-19
笔记
00
请注意,本文编写于 54 天前,最后修改于 54 天前,其中某些信息可能已经过时。

目录

架构总览
连接器
查询缓存
分析器
优化器
执行器

01 | 基础架构:一条SQL语句是如何执行的?

image.png

架构总览

image.png

MySQL 的架构分为 Server 层和存储引擎层。 其中 Server 层包含:

  • 连接器
  • 查询缓存
  • 分析器
  • 优化器
  • 执行器

而存储引擎则负责数据的存储的提取,采用插件式架构,支持 InnoDB、MyISAM、Memory 等多种存储引擎。

连接器

  • 连接器负责跟客户端建立连接、获取权限、维持和管理连接
  • 连接后没有后续动作的话,连接会成为空闲连接,可通过 show processlist 查看空闲连接
  • 默认如果客户端超过 8 小时没有任何活动,连接器会断开连接。可通过 wait_timeout 参数控制

查询缓存

  • 不建议使用查询缓存,因为只要对一个表更新,这个表的所有查询缓存都会被清空
  • 参数 query_cache_type 设置为 DEMAND,所有 sql 语句默认都不使用查询缓存
  • 可以对单条 sql 指定使用查询缓存,select SQL_CACHE * from T where ID = 10;

分析器

  • 先做词法分析,再做语法分析
  • 词法分析就是分析一条 sql 中哪些是表名,哪些是字段等
  • 语法分析就是检查语法错误

优化器

  • 如果表有多个索引,优化器可以决定用哪个索引进行查询
  • 如果是连接查询,优化器可以决定各个表的连接顺序

执行器

  1. 如果命中查询缓存,会在返回结果的时候验证权限

  2. 如果没有命中查询缓存,会在执行查询前验证权限

  3. 如果有权限,根据表的执行引擎,调用执行引擎的接口执行查询。执行步骤:

    3.1 调用引擎获取第一行,判断是否符合查询条件,是则存到结果集中,否则跳过

    3.2 调用执行引擎获取下一行,重复相同的判断,直到遍历到这个表最后一行

    3.3 执行器将结果集返回给客户端

本文作者:菜宝熊

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!