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 唯一索引怎么选 |
| 10 | MySQL 为什么有时候会选错索引 |
| 11 | 怎么给字符串字段加索引(前缀索引) |
| 12 | 为什么 MySQL 会「抖」一下(刷脏页) |
| 13 | 为什么删掉一半数据,表文件不变大(空洞) |
| 14 | count(*) 为什么慢 |
| 16–19 | order by 怎么工作、随机消息、SQL 性能差异、查一行也慢 |
模块 5:高可用与主备(第 22–30 讲)
| 讲次 | 核心知识点 |
|---|---|
| 23 | MySQL 怎么保证数据不丢(redo log) |
| 24 | 怎么保证主备一致(binlog 复制) |
| 25 | 怎么保证高可用(主备切换) |
| 26–28 | 备库延迟、主库出问题、读写分离的坑 |
| 29 | 怎么判断数据库出问题了(探活) |
模块 6:进阶主题(第 31–45 讲)
| 讲次 | 核心知识点 |
|---|---|
| 31 | 误删数据怎么救(binlog 闪回) |
| 32–33 | kill 不掉的语句、查数据把内存打爆 |
| 34–35 | join 能不能用、怎么优化 |
| 36–37 | 临时表 |
| 38–43 | InnoDB vs Memory、自增主键、insert 锁、复制表、grant、分区表 |
| 45 | 自增 id 用完怎么办 |
三、必须吃透的核心知识点
-
redo log 与 binlog(第 2 讲,全课基石):redo log 是 InnoDB 的「循环账本」保证崩溃恢复,binlog 是 MySQL 的「归档账本」用于主备复制和恢复。两阶段提交保证两者一致。
-
MVCC 与一致性视图(第 3、8 讲):可重复读靠「快照 + undo log 版本链」实现,读不加锁。理解「事务 id」和「活跃事务数组」就能理解「为什么改了我还看不见」。
-
B+ 树索引(第 4–5 讲):主键索引(聚簇)叶子存整行,二级索引叶子存主键——所以「回表」。覆盖索引、最左前缀、索引下推是三大优化点。
-
间隙锁与 next-key lock(第 20–21 讲):可重复读下用「行锁 + 间隙锁」锁住范围,防止幻读——这就是「只改一行却锁那么多」的原因。
-
主备一致性(第 24 讲):binlog 的三种格式(statement/row/mixed),row 格式保证主备一致。
四、引发思考
- 一条
update语句,从执行到落盘,redo log 和 binlog 各自做了什么?两阶段提交为什么必要? - 为什么 InnoDB 用 B+ 树而不是哈希、红黑树?(从「范围查询 + 磁盘 IO + 稳定」三个角度)
- 哪些写法会导致索引失效?(函数、隐式类型转换、前导模糊、最左前缀破坏……)
- 「可重复读」下为什么还会出现幻读?间隙锁怎么解决?
- 主从延迟的原因有哪些?读写分离后「读旧数据」怎么办?
- 学完本课,回头看阶段三《数据结构》的 B+ 树,是不是「理论照进现实」了?
五、学完自测
- 能画出「一条 SQL 查询」和「一条 SQL 更新」的完整执行流程
- 能说出 redo log / binlog / undo log 各自的作用
- 能解释四种隔离级别及各自问题
- 能说出 5 种以上索引失效场景
- 能解释主从复制的原理与延迟原因
配套:动手装一个 MySQL,造 100 万行数据,用
explain观察执行计划,亲手验证索引优化。