35 总结、展望与思考
更新时间:2020-05-20 09:33:52
立志是事业的大门,工作是登门入室的的旅途。——巴斯德

到这里,我们的 MySQL 课程就已经接近尾声了,不过,我还是想写些东西帮助你抓住 MySQL 的重点、掌握 MySQL 的精髓,以及提供一些路线作为学习的参考。这一节的主要内容围绕三个点来展开:总结部分将会对本专栏的知识点做出总结,指出重点内容;展望部分对专栏以外的知识点做介绍,提供继续学习方向的指导;思考部分则留出开放性思考问题,以便讨论交流。

1. 总结

整体来看,我们的专栏可以分为两部分:第一部分(第一章 ~ 第五章)讲解 MySQL 相关的知识点;第二部分(第六章)应用 MySQL 设计应用解决方案。这两部分相辅相成:学习 MySQL 的知识点可以指导我们更加合理的设计数据表;而设计数据表也是学以致用的过程。

1.1 MySQL 相关知识点的总结

为了使总结的知识点不过于分散,我这里以每一章为一个 “单元” 进行讲解。主要目的有两个:第一,让你知道哪些是重点内容,即经常出现在我们的日常工作中的;第二,面试常考的内容(其实这部分有许多并不会经常用到,更偏向于理论)。

  • 第一章知识点总结
    • MySQL 的常用数据类型与特性是基础中的基础,必须是牢牢掌握的。但是,不要硬背,多看、多想、多用
    • MySQL 最常用到的函数是聚合函数,条件判断函数和系统函数使用的频率不高,但是,常常出现在面试的考题中
    • 大部分情况下,用户与权限是 DBA 管理的,这部分的知识点主要是用于排查权限相关的错误
    • 数据备份与恢复是非常实用的,至少每天都应该去执行,以防在出现问题时不至于束手无策
  • 第二章知识点总结
    • 事务隔离级别、锁、并发、索引是难度比较高的知识点,但是它们非常的常用,且是面试的 “重灾区”
    • 连接、联合和子查询受限于性能,并不会在开发中大量的使用,但是也是面试的常客
    • 基准测试用于调试 MySQL 的性能,对于自运维的团队来说,也是必备的技能
  • 第三章知识点总结
    • MySQL 内部定义了大量的系统表,但是,实际需要掌握的并不会有很多,它们主要用于获取 “表相关” 的信息
    • 日志系统非常重要,特别是 Binlog 和慢查询日志,不论是日常的开发还是面试,都非常常见
    • 视图、分区表和存储过程应用场景比较少,但是,可不要忽视它们的潜力
    • 外键确实是个好东西,如果条件允许,尽量尝试着使用,不过,它在面试中出现的概率不高
  • 第四章知识点总结
    • 数据汇总、分库分表方案也只在特定的场景下才有用,不是必须,不要采用,这会增加你很多工作量
    • ORDER BY 语句在慢查询中占据非常高的比例,尽可能不要在数据库层面做这样的事
    • 线上服务器参数可能并不是最优的,但是,你也不能随意调整,这会损失线上流量
  • 第五章知识点总结
    • MySQL 的系统架构主要考察对两个组件的理解:分析器和优化器,但是,你应该不需要 “特别深入” 的学习和理解
    • InnoDB 的两大核心:存储和事务,最起码你要能说出来它们是怎么回事儿

1.2 关于应用设计的总结

我在做系统设计(电商和慕课网)的时候就曾多次强调:在初步设计时,不应该总想着去做 “完善” 的设计(但是,这并不是说不遵守一些基本的规则和考虑未来的需求变更),应该是以高效、可用为出发点。否则,就变成了过度设计,花费了很多精力,但是并没有带来匹配的价值提升。

我之所以会建议你这样做,基于以下几点原因:

  • 业务需求一定会发生变化,且大概率会影响到当前的表结构,修改表设计几乎是 “势在必行”
  • 业务是不断迭代的(这和修改不是一回事),当前的表设计很有可能在未来就不适用了;最坏的情况,业务取消了,表也就不再需要了
  • 认知是有局限性的,当前觉得对的事情很有可能在将来就不对了

2. 展望

不得不说,MySQL 包含或相关的知识点实在是太多了,所以,我们一定要有选择的学习,你不可能有那么多时间和精力掌握它的一切。其实,这对于任何一门技术或工具来说,都是成立的。我的这本 MySQL 专栏围绕两个重心:实用和面试,这里面不会包罗万象,当然也不会虚无缥缈。如果你读完了本专栏,还是感觉到意犹未尽,那么,我推荐你可以看一看:

  • InnoDB 存储引擎,存储、事务和索引的内部实现原理,但是其难度太大,需要自己做权衡
  • ORM 框架的应用和原理,例如:Hibernate、Mybatis、Django 等等,主要是学习开源框架应用 MySQL 的思想
  • 分布式数据库,例如 HBase 等。业务系统中可能会出现不适用于 MySQL 的场景,如果理解分布式数据库,可以考虑尝试应用

关于学习,我还是要给出一些 “温馨提示”:不要想去学习 “所有的东西”,你不可能有那么多时间和精力。我见过很多人知识面宽泛,但是泛而不精,一定不要只做表面功夫。毕竟,你总是需要在工作中有所产出,而这就可以检验你的水平。另外,学习的路上,不要着急,欲速则不达。

3. 思考

我在本专栏的每一节最后都留出了一些思考题,这里面有很多其实都是常见的面试题,你随时可以留言回复这些问题,我也会对应的给出解答。当然,如果你在工作、学习中还遇到了其他的问题,也可以随时提出,我会适当的给出解答。

最后,我留下一个开放性思考问题,我们可以共同讨论、交流和切磋:你是怎么学习 MySQL 的呢 ?或者说,你认为怎样学习 MySQL 比较好呢 ?你有任何想法、意见或建议,可以随时告诉我。

}