这门课解决什么问题

很多做业务开发的人,写 SQL 只停留在增删改查层面。表慢了就加索引,报错了就重启,MySQL 像一个黑盒,能跑就行,但出问题时毫无头绪。这门课不教你写基础语句,而是拆解 InnoDB 存储引擎的底层运行机制,解决“知其然不知其所以然”的痛点。它覆盖记录在数据页里的物理结构、B+ 树索引怎么组织数据、单表与多表查询的访问路径,以及 MySQL 基于成本怎么挑执行计划。学完之后,遇到慢查询或死锁,你能从优化器视角去倒推原因,而不是盲目试错。

适合什么基础,学完能做什么

资料要求你已经能写基本的 SQL,最好写过一两门后端语言里的数据库交互代码。如果完全没碰过关系型数据库,先补基础再来,否则一上来啃数据页结构会非常吃力。它不适合零基础转行者,更适合已经入行但想夯实底层原理的后端开发、运维或 DBA。学完之后,你能独立做几件具体的事:看懂 EXPLAIN 输出的各项指标并判断扫描范围;在表设计阶段根据字段区分度选择合理的索引列和顺序;面对慢查询能定位是回表过多还是统计信息偏差;对系统变量和字符集配置做出有依据的调整,而不是照抄网上配置。

建议先看哪几块,资料怎么配合练习

建议按顺序先啃三块:InnoDB 记录与数据页结构、B+ 树索引、基于成本的优化。前两块是理解索引的物理基础,搞懂一条记录在磁盘上长什么样,后面看索引树才不会懵。成本优化那块直接对应日常排障,优先级高。配合资料练习时,准备一个本地 MySQL 实例,建几张有真实数据的测试表。看记录结构时,用工具观察数据页的内部状态;看成本优化时,对着 EXPLAIN 结果反推优化器选了哪个访问方法,再改索引看成本变化。不要光看文字,底层机制必须动手验证才记得住。遇到看不懂的地方,先跳过表空间细节,回头再补,别卡在物理文件格式上。


授人以鱼不如授人以渔,从根儿上理解 MySQL,让 MySQL 不再是一个黑盒。

课程目录

*   万里长征第一步(非常重要!非常重要!非常重要!此处省略一万遍) —— 如何愉快的阅读本小册

*   装作自己是个小白 —— 重新认识MySQL

*   MySQL的调控按钮 —— 启动选项和系统变量

*   乱码的前世今生 —— 字符集和比较规则

*   从一条记录说起—— InnoDB 记录结构

*   盛放记录的大盒子 —— InnoDB 数据页结构

*   快速查询的秘籍 —— B+ 树索引

*   好东西也得先学会怎么用 —— B+ 树索引的使用

*   数据的家 —— MySQL 的数据目录

*   存放页面的大池子 —— InnoDB 的表空间

*   条条大路通罗马 —— 单表访问方法

*   两个表的亲密接触 —— 连接的原理

*   谁最便宜就选谁 —— MySQL 基于成本的优化

*   兵马未动,粮草先行 —— InnoDB 统计数据是如何收集的

*   不好看就要多整容 —— MySQL 基于规则的优化(内含关于子查询优化二三事儿)

*   查询优化的百科全书 —— Explain 详解(上)

*   查询优化的百科全书 —— Explain 详解(下)

*   神兵利器 —— optimizer trace 的神奇功效

*   调节磁盘和CPU的矛盾 —— InnoDB 的 Buffer Pool

*   从猫爷被杀说起 —— 事务简介

*   说过的话就一定要办到 —— redo 日志(上)

*   说过的话就一定要办到 —— redo 日志(下)

*   后悔了怎么办 —— undo 日志 (上)

*   后悔了怎么办 —— undo 日志 (下)

*   一条记录的多幅面孔 —— 事务的隔离级别与MVCC

*   工作面试老大难 —— 锁

*   补充资料——专题式讲解

*   专题式讲解 —— MySQL的server层和存储引擎层是如何交互的

*   专题式讲解 —— MySQL查询成本和扫描区间(MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!)

*   专题式讲解 —— 听说有一个最左原则?这回终于讲清楚了

*   专题式讲解 —— 设计MySQL的大叔为何偏爱ref

*   专题式讲解 —— MySQL中NULL值引起的小锅

*   专题式讲解 —— MySQL使用索引执行IN子句

*   专题式讲解 —— MySQL的COUNT语句是怎么执行的

*   专题式讲解 —— MySQL的LIMIT这么差劲的吗

*   专题式讲解 —— MySQL:为什么查询列表中多了它,GROUP BY语句就会报错呢?

*   专题式讲解 —— MySQL冷知识:t1.id=t2.id=t3.id看着咋这么怪呢?

*   专题式讲解 —— MySQL乱码

*   专题式讲解 —— 字符从UTF-8转成GBK发生了什么?

*   专题式讲解 —— MySQL的定点数类型

*   专题式讲解 —— Innodb到底是怎么加锁的

*   专题式讲解 —— 语句加锁分析实例

*   专题式讲解 —— MySQL如何查看事务加锁情况

*   专题式讲解 —— MySQL介于普通读和锁定读的加锁方式—— semi-consistent read

*   专题式讲解 —— 两条一样的INSERT语句竟然引发了死锁?

*   专题式讲解 —— binlog那些事儿(一)

*   专题式讲解 —— binlog那些事儿(二)

*   专题式讲解 —— redo、undo、buffer pool、binlog,谁先谁后,有点儿乱

*   专题式讲解 —— XA事务与两阶段提交

*   给小孩子的书打个广告

*   写作本书时用到的一些重要的参考资料

*   小册答疑指南

*   后记 —— 关于写技术书籍/文章的四个指导原则