MySQL 实战 45 讲 · 深度学习指南(细化版)

作者:林晓斌(丁奇)| 真实结构:45 讲正文 + 答疑/直播(共 52 个文件) 定位:极客时间史上最经典的数据库课——把 MySQL 当成「一个系统」拆开讲:一条 SQL 怎么走、索引怎么选、事务怎么隔离、日志怎么保证不丢、主备怎么一致。


一、这门课到底讲什么

这门课的核心方法论是「点线面网」:每一讲是一个「点」(一个具体问题),连起来成「线」(如日志系统),再串成「面」(如事务),最后织成「网」(MySQL 全局)。学完你不再是「会用 MySQL」,而是「懂 MySQL 为什么这样设计」。


二、真实讲次大纲(按模块)

模块 1:架构与日志(第 1–2 讲)

讲次核心知识点
01基础架构:一条 SQL 查询怎么执行(连接器→分析器→优化器→执行器)
02日志系统:一条更新语句怎么执行(redo log + binlog + 两阶段提交)

模块 2:事务与索引(第 3–5、8 讲)

讲次核心知识点
03事务隔离:为什么你改了我还看不见(四种隔离级别、MVCC)
04–05深入浅出索引(上/下):B+ 树、回表、覆盖索引、最左前缀
08事务到底隔离还是不隔离(一致性视图、快照)

模块 3:锁(第 6–7、20–21 讲)

讲次核心知识点
06全局锁、表锁、MDL
07行锁功过:怎么减少行锁对性能的影响
20幻读是什么,有什么问题
21为什么我只改一行,锁这么多(间隙锁、next-key lock)

模块 4:索引与优化实战(第 9–19 讲)

讲次核心知识点
09普通索引 vs 唯一索引怎么选
10MySQL 为什么有时候会选错索引
11怎么给字符串字段加索引(前缀索引)
12为什么 MySQL 会「抖」一下(刷脏页)
13为什么删掉一半数据,表文件不变大(空洞)
14count(*) 为什么慢
16–19order by 怎么工作、随机消息、SQL 性能差异、查一行也慢

模块 5:高可用与主备(第 22–30 讲)

讲次核心知识点
23MySQL 怎么保证数据不丢(redo log)
24怎么保证主备一致(binlog 复制)
25怎么保证高可用(主备切换)
26–28备库延迟、主库出问题、读写分离的坑
29怎么判断数据库出问题了(探活)

模块 6:进阶主题(第 31–45 讲)

讲次核心知识点
31误删数据怎么救(binlog 闪回)
32–33kill 不掉的语句、查数据把内存打爆
34–35join 能不能用、怎么优化
36–37临时表
38–43InnoDB vs Memory、自增主键、insert 锁、复制表、grant、分区表
45自增 id 用完怎么办

三、必须吃透的核心知识点

  1. redo log 与 binlog(第 2 讲,全课基石):redo log 是 InnoDB 的「循环账本」保证崩溃恢复,binlog 是 MySQL 的「归档账本」用于主备复制和恢复。两阶段提交保证两者一致。

  2. MVCC 与一致性视图(第 3、8 讲):可重复读靠「快照 + undo log 版本链」实现,读不加锁。理解「事务 id」和「活跃事务数组」就能理解「为什么改了我还看不见」。

  3. B+ 树索引(第 4–5 讲):主键索引(聚簇)叶子存整行,二级索引叶子存主键——所以「回表」。覆盖索引、最左前缀、索引下推是三大优化点。

  4. 间隙锁与 next-key lock(第 20–21 讲):可重复读下用「行锁 + 间隙锁」锁住范围,防止幻读——这就是「只改一行却锁那么多」的原因。

  5. 主备一致性(第 24 讲):binlog 的三种格式(statement/row/mixed),row 格式保证主备一致。


四、引发思考

  1. 一条 update 语句,从执行到落盘,redo log 和 binlog 各自做了什么?两阶段提交为什么必要?
  2. 为什么 InnoDB 用 B+ 树而不是哈希、红黑树?(从「范围查询 + 磁盘 IO + 稳定」三个角度)
  3. 哪些写法会导致索引失效?(函数、隐式类型转换、前导模糊、最左前缀破坏……)
  4. 「可重复读」下为什么还会出现幻读?间隙锁怎么解决?
  5. 主从延迟的原因有哪些?读写分离后「读旧数据」怎么办?
  6. 学完本课,回头看阶段三《数据结构》的 B+ 树,是不是「理论照进现实」了?

五、学完自测

  • 能画出「一条 SQL 查询」和「一条 SQL 更新」的完整执行流程
  • 能说出 redo log / binlog / undo log 各自的作用
  • 能解释四种隔离级别及各自问题
  • 能说出 5 种以上索引失效场景
  • 能解释主从复制的原理与延迟原因

配套:动手装一个 MySQL,造 100 万行数据,用 explain 观察执行计划,亲手验证索引优化。