Missmiaom
1/8/2020 - 11:36 AM

A. 基础架构

基础架构

MySQL 可以分为 Server 层和存储引擎层两部分。

  • Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
  • 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。默认为 InnoDB。

连接器

连接器负责跟客户端建立连接、获取权限、维持和管理连接。

查询缓存

MySQL 优先从内存缓存中查询是否已经执行语句。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。

如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查询缓存中。

不建议使用查询缓存

  • 查询缓存的失效非常频繁。只要更新一个表,该表上的所有查询缓存都会被清空。
  • 8.0 开始不支持查询缓存

分析器

分析器对SQL语句进行词法分析和语法分析。将字符串识别成表名、列名、操作名。 解析器处理语法和解析查询, 生成一课对应的解析树。

  • 解析器处理语法和解析查询, 生成一课对应的解析树
  • 预处理器进一步检查解析树的合法。比如: 数据表和数据列是否存在, 别名是否有歧义等。如果通过则生成新的解析树,再提交给优化器。

优化器

优化器会在执行SQL语句时,选择更优的执行方案。

  • 在表里面有多个索引的时候,决定使用哪个索引
  • 在一个语句有多表关联(join)的时候,决定各个表的连接顺序

执行器

执行器开始执行语句,首先判断执行查询的权限,然后根据引擎定义,使用引擎提供的接口。

Q&A

Q:查询不存在的列,是在哪个阶段报出的错误的呢?

A:分析器。