MySQL 知识点看似零散:索引、MVCC、redo log、执行计划、备份恢复……其实它们都挂在同一条主线上——一条 SQL 从发起到落盘经历了什么。本文按主题分组、依赖关系和学习顺序三个角度,把这条主线画出来。

主题分组

  • 体系结构:连接层/服务层/引擎层分工,Buffer Pool 与 Change Buffer,一条 SQL 的执行链路。
  • 索引:B+ 树结构、聚簇与二级索引、最左前缀、覆盖索引、索引下推、失效场景。
  • 事务与锁:ACID 的实现分工、四种隔离级别、MVCC 版本链与 ReadView、行锁/间隙锁/临键锁、死锁。
  • 日志:redo log(崩溃恢复)、undo log(回滚与 MVCC)、binlog(复制与归档)、两阶段提交。
  • 性能优化:慢日志、EXPLAIN 执行计划、SQL 改写、规范设计、读写分离与缓存。
  • 运维保障:备份恢复(mysqldump/XtraBackup/binlog PITR)、主从复制与高可用、大表变更工具。

依赖关系

几个关键的”谁依赖谁”,决定了理解的先后顺序:

  • MVCC 依赖 undo log:多版本就是靠 undo log 串起来的版本链,不懂 undo 就看不懂快照读。
  • 隔离级别的差异主要靠锁和 MVCC 解释:读已提交与可重复读的差别在 ReadView 的生成时机,幻读的防线是临键锁。
  • 执行计划依赖索引知识:EXPLAIN 里的 type、key、Extra 每一项都在描述索引的使用方式,不懂 B+ 树就看不懂计划好坏。
  • PITR 依赖 binlog:时间点恢复 = 全量备份 + binlog 重放,备份专题离不开日志专题。
  • 性能优化是综合应用:慢 SQL 分析要用到索引、执行计划、锁等待、缓冲池全部知识。

推荐学习顺序

  1. 体系结构:先建立”连接器 → 分析器 → 优化器 → 执行器 → 引擎”的整体图景,知道每个环节在哪一层。
  2. 索引:B+ 树是 InnoDB 的地基,聚簇索引与二级索引的区别、回表的代价必须吃透。
  3. 执行计划:学会 EXPLAIN,把索引知识变成可验证的优化手段。
  4. 事务与锁:ACID、隔离级别、MVCC、行锁与间隙锁,理解并发问题的根源。
  5. 三大日志:redo、undo、binlog 各自的分工,以及两阶段提交如何保证崩溃一致性。
  6. 备份恢复与高可用:PITR 演练、主从复制原理、复制延迟的处理。
  7. 性能优化综合:慢日志驱动的优化闭环,最后才是架构层手段(读写分离、缓存、分库分表)。

学习方法建议

  • 每个主题配一个实验:写一条用不上索引的 SQL 观察 type 退化;开两个事务验证可重复读的快照行为;用 binlog 做一次时间点恢复。亲手验证一次胜过背诵十遍。
  • 用一条 UPDATE 串起全局:优化器选索引 → 引擎加行锁 → 写 undo/redo → 提交时两阶段提交写 binlog → 主从复制。能脱稿讲清这条链路,说明主线已经打通。
  • 警惕两个误区:只背概念不做实验,面试追问一层就露馅;还没优化 SQL 和索引就谈分库分表,那是用架构复杂度掩盖基本功缺失。

小结

  • 主线:一条 SQL 的执行链路贯穿索引、事务、日志、优化四大主题。
  • 顺序:体系结构 → 索引 → 执行计划 → 事务锁 → 日志 → 备份高可用 → 综合优化。
  • 方法:每个主题做一个小实验,最后能完整口述一条 UPDATE 的完整生命周期。