从原理到实战,带你搞懂MySQL
数据库是一个综合系统,其背后是发展了几十年的数据库理论。也许你会觉得数据库并不难,因为你可以熟练地写出 SQL,也可以在各个客户端里玩得游刃有余。但就以最常见的 MySQL 为例,作为程序员,你在使用 MySQL 的过程中,是不是曾经遇到过类似的问题:
之前,你大概都是通过搜索别人的经验来解决问题。你有没有想过,如果能够理解 MySQL 的工作原理,那么在遇到问题的时候,是不是就能更快地直戳问题的本质?比如说,知道了索引的实现原理,那遇到索引问题的时候,你是不是就能从原理的角度,推断可能的解决方案?
mysql性能优化50讲将会以实战中的常见问题为切入点,带你剖析现象背后的本质原因。更重要的是,本专栏还将通过几条主线为你串起各个零散的知识点,再由线到面带你构建 MySQL 知识体系。
我是Sdar老师,前阿里资深技术专家,曾负责阿里云 RDS 内核开发团队和运维团队,并推动了 AliSQL 分支开源。作为活跃的 MySQL 社区贡献者,专注于数据存储系统、MySQL 源码研究和改进、MySQL 性能优化和功能改进,热衷于解决 MySQL 疑难问题。
当时,我自己的感觉是,即使我只是一个开发工程师,只是 MySQL 的用户,在了解了一个个系统模块的原理后,再来使用它,感觉是完全不一样的。当在代码里写下一行数据库命令的时候,我就能想到它在数据库端将怎么执行,它的性能是怎么样的,怎样写能让我的应用程序访问数据库的性能最高。进一步,哪些数据处理让数据库系统来做性能会更好,哪些数据处理在缓存里做性能会更好,我心里也会更清楚。在建表和建索引的时候,我也会更有意识地为将来的查询优化做综合考虑,比如确定是否使用递增主键、主键的列怎样选择,等等。但随后我又有了一个新的困惑,我觉得自己了解的 MySQL 知识点是零散的,没有形成网络。于是解决完一个问题后,很容易忘记。再碰到类似的问题,我又得再翻一次代码。
所幸在阿里工作的时候,我参与了阿里云关系型数据库服务内核的开发,并且负责开发开源分支 AliSQL,让我对 MySQL 内核和源码有了更深层次的研究和理解。在服务内部客户和公有云客户的过程中,我有机会面对和解决足够多的问题,再通过手册进行系统的学习,算是比较坎坷地将 MySQL 的知识网络补了起来。
所以,在回顾这个过程的时候,我的第一个感受是,如果一开始就有一些从理论到实战的系统性指导,那该多好啊,也许我可以学习得更快些。其所以然,都将能够解决你平时工作中的一个疑惑点。
mysql性能管理及架构设计目录如下:
image.pngimage.png