01 | MySQL基础架构:一条查询SQL如何执行

77 阅读2分钟

MySQL逻辑架构图

image.png

MySQL可分为:Server层+存储引擎层。

Server层:

  • 连接器、查询缓存、分析器、优化器、执行器等,
  • 涵盖MySQL的大多数核心服务功能,以及所有的内置函数
  • 跨存储引擎的功能在这一层实现

存储引擎:

  • 负责数据的存储和提取,插件式,支持InnoDB、MyISAM、Memory等多个存储引擎。

连接器

  • 管理连接、权限校验

查询缓存

  • 命中缓存直接返回结果。
  • 大多数情况下查询缓存弊大于利:只要表更新,这个表上缓存会被清空,导致缓存失效频繁。
  • 适用于一般业务的静态表,很长时间才会更新一次.
  • 注意:MySQL8.0版本直接将查询缓存的整块功能删除。

分析器

  • 词法分析,语法分析,对SQL做解析
  • MySQL需要知道你要做什么,因此需要对SQL语句进行解析。
    对词法、语法进行解析,比如关键字(select)识别等。

优化器

  • 执行计划生成,索引选择
  • 开始执行之前,需要经过优化器处理。
  • 表里有多个索引的时候,决定使用哪个索引;
  • 在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

执行器

  • 操作引擎,执行结果
select * from T where ID =10;

如果ID字段没有索引,执行器的执行流程如下:
1.调用InnoDB引擎接口取这个表的第一行,判断ID值是否是10,若不是则跳过,如果是则将这行存在结果集中。
2.调用引擎接口取“下一行”,重复相同的判断逻辑,直到这个表的最后一行。
3.执行器将上述结果满足条件的行组成的记录集作为结果集返回给客户端。