这一次,让我们一起来搞懂MySQL

  • 得刚开始接触 MySQL,是我在做权限系统的时候。遇到了一个奇怪的问题,一个正常 10 毫秒就能完成的 SQL 查询请求偶尔要执行 100 多毫秒才结束。我搞不清楚,就上网查答案,但怎么找都找不到,又脸皮薄不想说 自己不知道,只好硬着头皮翻源码。后来遇到了越来越多的问题,也是类似的情景,所以我 逐步养成了通过分析源码理解原理的习惯。
  • 我自己的感觉是,我只是开发工程师,只是 MySQL 的用户,在了解了一 个个系统模块的原理后,再来使用它,感觉是完全不一样的。当在代码里写下一行数据库命 令的时候,我就能想到它在数据库端将怎么执行,它的性能是怎么样的,怎样写能让我的应用程序访问数据库的性能最高。进一步,哪些数据处理让数据库系统来做性能会更好,哪些数据处理在缓存里做性能会更好,我心里也会更清楚。在建表和建索引的时候,我也会更有 意识地为将来的查询优化做综合考虑,比如确定是否使用递增主键、主键的列怎样选择等。
  • 但随后我又有了一个新的困惑,我觉得自己了解的 MySQL 知识点是零散的,没有形成网络。于是解决完一个问题后,很容易忘记。再碰到类似的问题,我又得再翻一次代码。通过手册进行系统的学习,算是比较坎坷地将 MySQL 的知识网络补了起来。
  • 我希望能够帮助这样的一些开发者:他们正在使用 MySQL,知道如何写出逻辑正确的 SQL 语句来实现业务目标,却不确定这个语句是不是最优的;他们听说了一些使用数据库的最佳实践,但是更想了解为什么这么做;他们使用的数据库偶尔会出问题,需了解如何更快速、更准确地定位问题,甚至自己解决问题……
  • 我希望这个专栏能够激发开发者对数据库原理的探索欲,从而更好地理解工作中遇到的问题,更能知道背后的为什么。所以我会选那些平时使用数据库时高频出现的知识,如事务、索引、锁等内容构成专栏的主线