Skip to content

MySQL架构与存储引擎

1. 这是什么

MySQL 架构描述了客户端、连接层、执行层、存储层之间如何协作。
存储引擎则决定了数据如何存储、事务是否支持、索引如何组织。

一句话理解:

  • 架构回答的是“一条 SQL 在系统里怎么走”
  • 存储引擎回答的是“数据最终怎么被组织和访问”

2. 为什么重要

理解整体架构后,你才能知道一条 SQL 在系统里经历了什么。
理解存储引擎后,你才能明白:

  • 为什么 InnoDB 会影响事务、锁和性能表现
  • 为什么同样是 MySQL,不同引擎的行为差别会很大

3. 先建立直觉:一条 SQL 不是直接“去磁盘拿数据”

很多人对数据库的第一印象是:

  • 应用发 SQL
  • 数据库去磁盘找结果

这太粗了。
更真实的路径通常是:

  1. 客户端建立连接
  2. 服务端接收并校验 SQL
  3. 解析器分析语法
  4. 优化器选择执行路径
  5. 执行器调用存储引擎
  6. 存储引擎访问页、索引和数据

所以后面你学索引、事务、锁、执行计划时,都会回到这条链上。

4. 核心内容

4.1 MySQL 的基本分层

学习阶段可以先把 MySQL 粗分成这几层:

  • 客户端 / 连接层
  • SQL 解析与执行层
  • 存储引擎层

这不是官方唯一画法,但非常适合建立认知。

4.2 连接器、解析器、优化器、执行器

连接器

负责:

  • 建立连接
  • 身份认证
  • 权限校验

解析器

负责:

  • 判断 SQL 语法是否合法
  • 把 SQL 解析成内部结构

优化器

负责:

  • 选择执行路径
  • 决定走哪个索引
  • 决定表连接顺序

执行器

负责:

  • 按优化器选定的方案真正执行
  • 调用存储引擎取数据

4.3 InnoDB 与 MyISAM 的差异

学习阶段最重要的不是背表,而是建立几个关键对比:

能力InnoDBMyISAM
事务支持支持不支持
行级锁支持主要不是这一优势
崩溃恢复更强较弱
线上主流使用已较少用于事务型业务

工程上的核心结论通常是:

  • 大多数线上事务型系统优先用 InnoDB

4.4 页、段、表空间

学习存储引擎时,最重要的是知道:

  • 数据不是按“Java 对象”的方式保存
  • 它最终会落到磁盘页、段、表空间这些更底层结构中

学习阶段先建立抽象理解即可:

  • 页:基本 I/O 单位
  • 段:更高层组织结构
  • 表空间:数据和索引的存储空间组织方式

4.5 聚簇索引是什么

InnoDB 里最关键的一个概念就是聚簇索引。
它的核心意思是:

  • 主键索引叶子节点里保存的是整行数据

这会带来两个很重要的影响:

  • 数据天然按主键组织
  • 二级索引查到主键后,往往还要再回到主键索引取整行

5. 学习重点

这一章最重要的是掌握:

  • MySQL 一条 SQL 会经历完整执行链路
  • 存储引擎会直接影响事务、锁、索引和恢复能力
  • InnoDB 成为主流不是偶然,而是因为它更适合事务型业务
  • 聚簇索引会影响数据组织方式和查询路径

6. 常见问题

6.1 只记执行顺序,不理解各层职责

顺序记住了,但一到排障就不知道:

  • 这是优化器问题
  • 还是存储引擎问题

6.2 不清楚存储引擎会影响哪些能力

这会让你误以为“数据库行为都一样”,其实不是。

6.3 把 InnoDB 当成纯黑盒

后面学索引、锁、事务时就会越来越吃力。

7. 动手验证

当前环境没有 mysql 客户端,所以这一节整理成可直接复制到 MySQL 环境执行的实验步骤。

7.1 查看默认存储引擎

sql
SHOW VARIABLES LIKE 'default_storage_engine';

你应该观察:

  • 默认引擎是不是 InnoDB

7.2 查看表使用的存储引擎

sql
SHOW TABLE STATUS LIKE 'your_table_name';

重点看:

  • Engine

7.3 对比 InnoDB 与 MyISAM 建表

sql
CREATE TABLE demo_innodb (
    id BIGINT PRIMARY KEY,
    name VARCHAR(64)
) ENGINE=InnoDB;

CREATE TABLE demo_myisam (
    id BIGINT PRIMARY KEY,
    name VARCHAR(64)
) ENGINE=MyISAM;

你可以进一步观察:

  • 是否都能正常建表
  • 后续事务和锁行为是否一致

7.4 观察架构侧信息

sql
SHOW PROCESSLIST;
SHOW ENGINES;

重点感受:

  • MySQL 不只是一个“数据文件读取器”,而是完整的服务端系统

8. 练习建议

  • 画一张 MySQL 执行链路图
  • 对比 InnoDB 和 MyISAM 的特性
  • 总结聚簇索引的含义和影响
  • 用自己的话解释“为什么大多数线上系统优先选 InnoDB”

9. 自测问题

  • MySQL 一条 SQL 大致会经过哪些层?
  • InnoDB 为什么适合事务型业务?
  • 聚簇索引对数据组织方式有什么影响?
  • 优化器和执行器分别负责什么?

10. 自测核对要点

  • MySQL 架构包含连接、解析、优化、执行和存储引擎协作
  • InnoDB 的事务、锁和恢复能力是其成为主流的重要原因
  • 聚簇索引会直接影响数据存储组织和查询路径