作者:柳树
链接:https://www.zhihu.com/question/34840297/answer/1027716775
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


最近写了很多 MySQL 的文章,也有很多同学问我是怎么学的、有什么好的书籍资料推荐,于是捣腾了一下,把毕生所学,写了下来。

分级学习

学一项技术,我习惯分成 3 个等级,像打怪练级一样去学它:

  • Level 1 - 学会使用它
  • Level 2 - 弄懂背后的原理
  • Level 3 - 学会怎么优化它

另外还有 Level 4,留到最后再讲。

学习原则

在学习过程中,有两条原则:

  • 第一,在这个练级的过程中,要不断的思考和实践
  • 第二,你可以在这 3 个等级之间来回穿梭

先来说第一条原则 —— 不断的思考和实践。

当你学习如何使用 MySQL 时,你要思考,为什么这样的调用会产生这样的结果:

  • 为什么有的 sql 很慢,有的 sql 很快
  • 为什么我事务A还没提交,事务B就感知到了
  • 为什么 innodb 是默认的存储引擎

……

你在思考什么?其实你在思考 Level 2 里要解决的问题 —— 技术背后的原理。

为什么这样的输入,会产生这样的输出,弄懂这些,MySQL 对你而言就不再是一个黑盒。**

而当你在弄懂 MySQL 内部原理的过程中,你要思考,既然 MySQL 是这么实现的,那我可以做些什么来优化它?

  • 既然索引结构是 B+ 树,那么该怎么设计 sql 语句,该怎么设计索引?
  • 既然有数据缓存池,那内存大小该怎么设置才合理?
  • 既然 redo log 要写磁盘,那么可以怎么提升写磁盘的效率?

你在思考什么?没错,你还是在思考下一个 Level 要解决的问题 —— 怎么优化它。

上个 Level 的输出会成为下个 Level 的输入,产生输出的前提是不断的思考。

思考让你学的更多更深,但是却不一定能帮助你解决实际问题,所以你还要用实践来检验自己是不是真的弄懂了,有三种方式可以检验

1、用实际工作项目检验自己**
在工作中能用到你学的东西是最好不过的,MySQL,相信大家都会用到,线上出了慢查询、死锁,别管是不是你的锅,赶紧主动抢过来排查;

2、用面试题检验自己
这个很好做,面试题网上一搜一大把,可以模拟下面试,如果你被问到这些问题,你会怎么回答;

3、用写作检验自己
这个是三种检验方法里最耗能量的,但我觉得也是收益最持久的:

  • 首先,知识学了容易忘记,但是当你把它写下来了,就随时可以找回这些记忆。
  • 其次,你在写作的过程中,会不断的审视自己的观点,在写的时候,你会觉得,哎,这里好像缺了什么,写不下去,其实就是你自己在写的时候,对自己提出了质疑。你在写出来的过程中,会不断向自己提问,从而让自己学的更深,弄得更懂。
  • 最后,这也是打造个人品牌,扩大自身影响力的方式。

这就是第一条原则,不断思考和实践。
接着再先来说第二条原则 —— 你可以在这 3 个等级之间来回穿梭。
**
这 3 个等级并不是对整项技术而言的,而是指对这项技术的具体某个知识点的掌握程度。

举个例子,你可能学会怎么写 sql,学会 sql 背后的实现以及如何对 sql 进行调优,对于 sql 你已经是 Level 3 了,但是这时候你接触到了分库分表,而对于分库分表而言,你其实只是 Level 1 的水平,这下你就又得躬身入局,谦虚的学习,努力的练级了。

我一直认为所谓的学习路线,都不是一条路走到底的,而是迂回的。**

保持一份空杯的心态非常重要,时刻准备好承认自己对于知识的无知,谦虚的从零学起,而不是觉得自己解决了某个非常牛逼的问题后,就把自己捧上神坛,觉得自己无所不知。

现在回到题主的问题,对于 MySQL,在这 3 个 Level 里,我分别会推荐这些书籍和文档:

Level 1 - 学会使用 MySQL

其实如果你英文很牛逼的话,我肯定是推荐官方文档的,上面什么都有,属于 Level 1 的有:

  • MySQL 安装:Installing and Upgrading MySQL,官方给的安装文档,你还不放心?各种操作系统的都有,这下不用装环境装到骂娘了
  • MySQL Hello World:Tutorial ,带你过一把操作 MySQL 的快感
  • Sql 语句大全:SQL Statements,全部 SQL 语句,都在这了

链接的 url 里带有 MySQL 的版本号,比如我这里贴的是 8.0 的,你要是装的 5.7,换一下就好了,再也不用照着别人的文档操作,结果最后操作出来不一样,还跑去人家博客下面骂,结果是因为版本不一致,啪啪打脸。

不过很多人要是上来就看英文文档,估计很快就从入门到放弃了,所以如果英文不太好的同学,还是找一本比较有趣的书看吧,英文不错的同学,也可以书籍和官方文档结合着看。

Level 1,刚入门嘛,开心最重要。

书籍推荐:《MySQL必知必会》,豆瓣评分 8.4,这本书写的那叫利索。

有人要问了,书那么厚,要全部读完吗?

这就是没认真听讲,刚刚都说了,你可以在 Level 1 ~ Level 3 之间不停地来回跳跃、穿梭、蹦跶,有些看起来比较复杂的知识点,快速刷过去,有个印象就够了。

Level 2 - 弄懂 MySQL 背后的原理

推荐:

配套阅读:

延伸阅读:

《MySQL技术内幕 : InnoDB存储引擎》这本书讲了很多 Innodb 存储引擎的实现原理,在 Level 2,你可以以这本书为主要参考,配套着《高性能 MySQL》,这本虽然侧重性能调优,但是也讲解了很多原理的知识,以及 MySQL 官方文档,书籍难免会有过时和纰漏,当产生疑问时,到最权威的地方寻找答案是最靠谱的,当然别忘了谷歌和 Stackoverflow。

如果还有余力,可以看下《数据库系统概念》,有人建议把这本书放到入门,我觉得这样又会把很多人从入门到放弃了,这是我学习的一个原则,不要上来就啃黑皮书(就是机械工业出版社的那些封面是黑色的书)。

这本书适合什么时候看呢?适合你已经玩过数据库了,用过了,并且对原理有一定了解了,这时候过来看,你会发现,你之前学的东西,对于其他关系型数据库,甚至 NoSQL、分布式数据库,居然也适用,真是奇妙。

Level 3 - 学会怎么优化 MySQL

推荐:

配套阅读:

延伸阅读:

呃,你没看错,我只是把《高性能 MySQL》放到了「推荐」,《MySQL技术内幕 : InnoDB存储引擎》挪到了「配套阅读」,原因还是上面说的,这两本书其实讲原理和讲优化的都有,只是侧重点不同,如果你在其中一本找不到答案,或者觉得里面的解释很牵强,就去另一本书里找,还找不到,就到 MySQL 官方文档 找,还找不到,就谷歌,就 Stackoverflow.

延伸阅读里多了一本书 —— 《数据库索引设计与优化》,这本书厉害了,光索引能给你写这么厚一本书,而且还让人读起来很顺畅,感觉一气呵成,索引的三星标准,也是书里提出来的。

记住你是可以在不同 Level 之间来回穿梭的,所以这些书,都要放在你书桌旁边,放到你伸手就能够着的地方,方便你随时翻阅。

最后,开头提的 Level 4,在下斗胆,推荐阅读:

这是想干嘛?

没错,这是要成为数据库专家,你都学到这分上了,难道还只满足于做一个 DBA 吗?

当知识学的足够深入时,你会发现你学到了一些领域通用的能力**,这也是我推荐了三本讲数据库通识的书的原因,尤其是 《数据库系统概念》,我是从 Level 2 推荐到 Level 4,这本书是值得没事就拿来翻翻,找一两个章节阅读的。

还推荐了 MySQL 官方开发手册:MySQL Internals Manual,这又是想干嘛?

其实这是我之前提的 —— 「实践」,你都已经学的这么深了,觉得自己对 MySQL 调优了如指掌,对数据库也学的如此透彻,这时候,为何不尝试一下阅读一下 MySQL 的源码,甚至给它提交代码呢?

好了不吹牛了,这个 Level 4 只是我的一个想法,毕竟本人也志不在此,我觉得我可以在 Level 2 和 3 之间就已经很不错了,只是知道有 Level 4 的存在,会让我自己知道自己还有很多不知道,让自己变得谦虚一些。

写了这么多,大家别只顾着收藏,记得点个赞再走。