说在前边的话:我用“小孩子”这个名称写文章其实主要是想我们有时候长大后就忘记了自己是小孩子时的样子,走的太远而忘记自己为什么出发。我希望能把自己放到一个小孩的心态去对待各种技术,时刻警惕自己:当初自己不会的时候是怎样想的?我这样写同学们是不是会感到晕晕乎乎,如果我当时学习的时候能在文章里看到一些段子该多好啊~
写这本书的初心就是想让MySQL进阶的学习过程不再那么难懂,不再那么枯燥,从一大部分的读者反馈来看我的目的是达到了。有同学有疑问书中的内容和公众号中发的有什么不同么,大概有这么几点:
覆盖面不同,公众号的内容主要是基础内容,并没有包括查询优化和事务和锁相关章节。
更加准确,公众号中的内容是我大约一年前整理的了,当时只是随手写的博客,里边儿有不少错误,在最新的小册中,我修复了很多的已知错误。
旧的文章增删的程度比较大,由于公众号文章写的时候并没有很好的构思,所以缺漏了非常多的知识点,在小册中增加了相应的部分,公众号的一些就文章的内容应该增加了一倍左右。
小册介绍
MySQL
凭借着它还不错的性能、还不错的稳定性常年稳居老二宝座,当然最大的优势就是它不要钱,还开源,这让它成为大部分中小型公司,尤其是互联网公司首选的数据库(近年来越来越多的大公司也在尝试将业务转移到这种不要钱的数据库上来)。
越来越多的DBA
和后端同学在工作中少不了和MySQL
打交道,为什么这个SQL执行的这么慢?为什么明明我建了索引但查询计划显示没用?为什么我的IN
查询里的参数一多就不使用索引了?为什么突然我的数据就成了乱码?到底应不应该使用连接查询?吧啦吧啦一大堆。在面试中MySQL
的一些知识更成为躲不过的问题,比如索引结构、MVCC、隔离级别的实现、锁的使用等等等等都成为了面试考题重灾区。
有非常多的技术书籍会用一个上帝视角去描述一个对于小白来说十分陌生的领域,通常描述一个陌生事物都是大量概念的堆积,看似逻辑上天衣无缝,其实小白在看到第三行的时候可能就已经看不下去了,产生了抵触情绪,从而更安不下心去看后边的东西,得出的结论就是:这本书太高深了,我看不懂呀~ 所以很多时候我们都会觉得看书学习是一件很枯燥乏味的事儿,但是因为周围环境的压力,比方说老师家长的逼迫,升职涨薪的压力,我们又不得不以一种极不情愿的态度去强迫自己去学习那些我们并不感兴趣的技术书籍,既不想又必须去看,好纠结啊,所以幸福感骤然下降,影响到了生命的质量。
其实对于工程技术人员来说,大部分接触的所谓技术
是没那么需要智商的,只是需要讲解这些技术的同学稍微切换一个角度,切换到小白的角度而不是站在一个上帝视角去讲述问题,那些看起来非常高深复杂
的问题其实都是为了一个非常简单的初衷而不得不采用的设计。我的任务就是带着大家从非常简单的问题出发,在解决问题的路上我们会遇到一些麻烦,由这些麻烦我们会很自然的引入一些新的概念,我会不断的向大家强化这些新概念,当我确保大家已经完全掌握了这些新概念后,会基于这些新概念再引入一些更为复杂的问题。高楼大厦虽然雄伟,解构之后不过是钢筋水泥。当然这个过程我会适当的给大家加点儿料,扯扯犊子,让大家像读小说一样接受这些MySQL的核心概念。
小册的套路
不知道大家有没有看过天龙八部,西夏公主张榜招婿只为寻找她的梦郎
(虚竹饰),在大殿上垂着帘子,用纱捂着脸,朦朦胧胧非常神秘。stop!大家为啥觉得她很神秘,因为看不清啊🙄🙄🙄!!! 当虚竹娶了她以后天天看,夜夜看,打死我都不信虚竹会认为他老婆很神秘。
我们相信,只要向大家有节奏的展示足够多的技术细节,那么整个学习过程将会变得流畅平滑,MySQL
的面纱也会慢慢的被摘下。所以我们在后续介绍MySQL
运行过程中需要用到的各种结构时会尽力向大家解释清楚每个字节都是干嘛用的,某几部分组合起来会有什么样的效果等等。
对于一些比较复杂的概念时,我们不准备使用概念先行方式进行讲解,也就是先给大家提出一个概念,然后介绍这个概念有什么什么属性,每个属性又有什么什么特点,每个特点又有什么什么的用法。我们在解释比较复杂的问题时会按照下边的套路出发:
我们遇到了什么问题;
为了解决问题提出了什么概念;
这个概念在MySQL中又有哪些需要注意的地方。
也就是:不先讲是什么,先讲为什么。
覆盖的内容
本小册致力于覆盖大家工作和面试过程中最常遇到的MySQL
的一些核心概念,共划分为4个部分,各部分简介如下:
| 部分 | 简介 | 描述 |
|---|---|---|
| 第一部分 | 入门 | 以只会写增删改查语句的小白身份重新审视一下MySQL到底是个什么东东,介绍 MySQL的服务器程序和客户端程序有哪些、启动选项和系统变量以及字符集的一些事情。 |
| 第二部分 | 基础结构相关 | 唠叨记录、页面、索引、表空间的结构和用法,是全篇的基础,后边的章节都依赖于这些结构。 |
| 第三部分 | 查询优化相关 | 介绍同学们工作中经常遇到的查询优化问题,介绍单表查询是如何执行的、连接查询是怎么执行的、MySQL基于成本和规则的优化是个什么东西,以及十分详细的介绍一下如何查看Explain语句的执行结果。 |
| 第四部分 | 事务和锁相关 | 介绍为什么会有事务的概念,以及MySQL是如何实现事务的,包括redo日志、undo日志、各种锁的细节等~ |
全是图
有时候使用语言表述一个东西太抽象,一图胜千言,所以我们在各种可能让大家迷糊的地方画了各种对应的图示,整个小册用到的图片有上百张之多(其实我背地里画了 200 多张图片),象征性的贴几张:
Compact行格式示意图:

InnoDB数据页结构示意图:

B+树索引结构示意图:

表空间结构示意图:

单表查询中根据二级索引访问的示意图:

Buffer Pool
的free
链表示意图:
另外
当然,MySQL
是一个很大的主题,我这里只能尽量用通俗的语言让大家理解许多重要的概念或者模型,要是事无巨细的都写出来应该能写好几千页,Baron Schwartz之前写了个关于InnoDB
存储引擎的一个提纲:An Outline for a Book on InnoDB,他列了提纲之后貌似就再没写书的动静了,可能是内容太多了吧,这本书一直没见着问世,不过大家可以通过这个提纲一窥全貌。
作者介绍
小孩子:前在线教育公司「跟谁学」后端工程师,公众号「我们都是小青蛙」作者,喜欢研究源码,觉得把复杂的问题讲清楚是一件很牛逼的事儿。
你会学到什么?
MySQL 的一些基本概念;
如何处理使用 MySQL 过程中的乱码问题;
从根儿上理解 InnoDB 存储引擎是如何存储记录、数据页,以及由页作为节点组成的
B+
树索引的原理;理解 InnoDB 存储引擎的表空间概念,知道 InnoDB 是如何管理段、区、页这些玩意儿以及 InnoDB 的数据字典;
理解 MySQL 是如何执行单表查询、如何执行连接查询;
理解 MySQL 基于代价的优化和基于规则的优化到底是啥意思;
知道如何查看自己写的查询语句是好是坏,学会使用optimizer tracer;
理解为什么需要事务以及它的基本概念;
redo 和 undo 日志的作用以及在 MySQL 中这些日志的细节;
理解并发带来的各种问题以及 MySQL 中使用锁的各种细节;
理解学习的快乐,希望各位看完本小册就像是读完一本小说一样畅快淋漓。
适宜人群
刚刚学完 SQL 基础的学生同学们;
被数据库问题折磨的求职者们;
天天被 DBA 逼着优化 SQL 的业务开发小伙伴;
菜鸟 DBA 和不是非常菜的 DBA 小伙伴;
对 MySQL 内核有强烈兴趣但看源码一脸懵逼的小伙伴。
名人推荐




大家可以长按图片扫描下边二维码了解更多小册内容:

有帮助的话给点个好看再走呗





