整体架构
MySQL 整体分为四层:客户端、MySQL Server、存储引擎层、文件系统。

各层职责:
- 客户端:JDBC、ODBC、.NET、CLI 等连接方式
- MySQL Server:核心处理层(连接器、分析器、优化器、执行器等)
- 存储引擎层:可插拔式,常见 InnoDB、MyISAM、Archive 等
- 文件系统:Linux/Windows/Mac 磁盘数据
SQL 语句执行过程
从客户端发送 SQL 到拿到结果,中间经历了哪些阶段?

一条 SQL 走完 MySQL Server 内部组件的过程:
- 连接器:监听客户端请求,认证身份,维持连接
- 查询缓存:以 K-V 缓存 SELECT 结果。MySQL 8.0 已移除此模块——因为表数据每次更新都需要清空相关缓存,命中率极低,得不偿失
- 分析器:词法分析(识别关键字)+ 语法分析(检查 SQL 语法是否符合规则),最终产出解析树
- 优化器:决定是否使用索引、多表 join 的顺序等,生成最优执行计划
- 执行器:校验用户对表/数据是否有权限,以行为单位调用存储引擎执行 SQL
- 存储引擎:将执行器指令落实为磁盘 I/O,返回结果
⚠️ 常见误区:很多人以为执行器直接读盘数据,其实执行器只负责”调度”——真正的数据读写都在存储引擎层。
存储引擎总览
MySQL 是”可插拔式存储引擎”架构,核心 Server 层与存储引擎层解耦。下面是几个关键引擎的对比:
| 引擎 | 锁粒度 | 事务 | 索引 | 适用场景 |
|---|---|---|---|---|
| MyISAM | 表级 | ✗ | 全文索引 | 5.5 之前默认引擎,只读/空间类应用(GPS 数据) |
| InnoDB | 行级(+ 表级) | ✓ | 聚簇 + 二级 | OLTP 通用场景,5.5+ 默认引擎 |
| CSV | — | ✗ | ✗ | 数据交换中间表,可直接编辑文本 |
| Archive | — | ✗ | 仅自增 ID | 日志、数据采集,只支持 INSERT/SELECT |
| Memory | 表级 | ✗ | HASH + BTree | 临时表、缓存,size 受 max_heap_table_size 限制(默认 16M) |
| Federated | — | — | — | 访问远程 MySQL 表,本地只保存表结构 |
MyISAM 关键特点
- 表级锁:并发写性能差
- 压缩表:压缩后只读(不可写入),节省空间
- 空间利用率高:不实现事务,没有 undo log 等开销
- 插入快:适合日志类静态数据
InnoDB 关键特点
- 行级锁(引擎层实现),并发性能好
- 支持事务、外键
- 聚簇索引(数据按主键组织)
- MVCC(多版本并发控制)
- 独立表空间(
innodb_file_per_table=ON),便于单表迁移/恢复
InnoDB 如何实现事务 ACID
- A(Atomicity)原子性:undo log(事务回滚)
- C(Consistency)一致性:undo log + redo log + 约束
- I(Isolation)隔离性:锁 + MVCC
- D(Durability)持久性:redo log(崩溃恢复)
行级锁与隔离性的关系:事务 A 改了某行但未提交,事务 B 读取该行时不会阻塞——它通过 undo log 读到旧版本(MVCC 快照读)。这是 InnoDB 默认 RR 隔离级别下”读不阻塞写”的根本原因。
下一篇会深入到 InnoDB 最核心的部分:索引结构(B+ 树、聚簇/非聚簇)与查询原理。