暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL数据库,如何从入门到精通?

托尼学长 2023-07-12
56

其实,无论学任何东西,都讲究的是循序渐进,深入浅出。

如果一上来就去接触MySQL的底层原理,思考如何进行性能优化,那绝对是劝退模式。

正确的学习路径应该是:简单上手——> 熟练使用 ——>弄懂原理 ——> 深入优化 ——> 产品重建。

当然,如果想走全这五个步骤,最关键的就是:兴趣驱动,深入思考。


Level 1:简单上手

(1)想要上手的话,你得先把MySQL装上吧,推荐安装最新8.0版本的,一步到位。

(2)你还需要一个MySQL的客户端,个人推荐Navicat,操作简单好用。

(3)你需要知道MySQL有哪些数据类型,以及会一些库表的基本操作,以及会写简单的SQL语句。

Navicat安装:Navicat 16破解版下载-Navicat Premium 16破解版下载 v16.0.7(附安装教程)

MySQL的安装、基础知识和基本操作,可以看《MySQL是怎样使用的:快速入门MySQL》的前七章。


目录如下:

第1章 MySQL概述与安装 1
第2章 MySQL初体验 18
第3章 MySQL数据类型 35
第4章 数据库的基本操作 51
第5章 表的基本操作 55
第6章 列的属性 68
第7章 简单查询 82

这些弄完之后,MySQL的Hello World你已经写出来了。


Level 2:熟练使用

(1)数据库的熟练使用,往往等于熟练使用CRUD SQL语句,包括一些相对复杂的多表关联查询、子查询等。

(2)会添加索引,了解数据库索引的基本概念,知道如果字段加索引了,查询效率会比较快。

(3)会进行常见系统的表设计,需要了解数据库的范式、ACID特性等作为知识辅助。

Btw:存储过程、视图、触发器之类的知识没必须要学,基本上很少有公司会用了。

大家可以继续看《MySQL是怎样使用的:快速入门MySQL》的第八章到第十四章。

第8章 带搜索条件的查询 92
第9章 表达式和函数 100
第10章 分组查询 121
第11章 子查询 129
第12章 连接查询 136
第13章 并集查询 149
第14章 数据的插入、删除和更新 154


Level 3:弄懂原理

到了这个level,难度剧增,这也是从一个初中级工程师往高级、专家级工程师迈进的重要标准。

(1)弄明白MySQL的锁机制,并知道其解决哪种场景的问题。如:乐观锁、悲观锁、共享锁、独占锁、记录锁、间隙锁、Next-Key锁、意向锁、插入意向锁、行锁、表锁、页锁、自增锁、死锁等。

(2)弄明白MySQL的索引机制,如:B+树索引、哈希索引、聚簇索引、非聚簇索引、前缀索引、覆盖索引、组合索引、最左前缀等等。

(3)弄明白MySQL的事务和日志,如:事务隔离级别、事务实现原理、MVCC、Redo Log、Undo Log、Bin Log、mini-transaction、脏读、幻读、不可重复度。

(4)弄明白MySQL的存储,如:存储原理(页、区、段、表空间)、Buffer Pool等。

(5)其他重要知识,如:执行计划、表连接算法、ICP、BKA、MRR、Master Thread调度、Partial Write、Change Buffer等。

推荐书籍的话,MySQL领域有三本神级书籍,即:《高性能MySQL(第三版)》、《MySQL技术内幕 : InnoDB存储引擎(第2版)》和《MySQL内核:InnoDB存储引擎》。


这三本书几乎包含MySQL 的所有重点知识,也是面试常面的知识点:日志、存储、锁机制、索引、调度、事务、架构等。但如果这三本书确实觉得难度过大,看不下去的话,我推荐这本书作为过渡。

推荐书籍:《MySQL是怎样运行的:从根儿上理解 MySQL》


面对底层原理如此复杂的MySQL,作者很用心设计本书的章节顺序,从现有场景引出可能出现的问题再到解决方案设计,循序渐进的揭开MySQL的内部实现细节。

“刚开始是什么样子的”,“有什么问题”, “如何解决”, 一步一步娓娓道来,每一章的知识就是那么水到渠成,这不是讲解而是在设计。国内技术书籍都有这样的态度,那一定会崛起技术上的颠覆。

目录如下:

第0章 楔子——阅读前必看 1
第1章 装作自己是个小白——初识MySQL 3
第2章 MySQL的调控按钮——启动选项和系统变量 19
第3章 字符集和比较规则 34
第4章 从一条记录说起——InnoDB记录存储结构 55
第5章 盛放记录的大盒子——InnoDB数据页结构 72
第6章 快速查询的秘籍——B+树索引 90
第7章 B+树索引的使用 107
第8章 数据的家——MySQL的数据目录 132
第9章 存放页面的大池子——InnoDB的表空间 140
第10章 条条大路通罗马——单表访问方法 166
第11章 两个表的亲密接触——连接的原理 178
第12章 谁最便宜就选谁——基于成本的优化 190
第13章 兵马未动,粮草先行——InnoDB统计数据是如何收集的 210
第14章 基于规则的优化(内含子查询优化二三事) 220
第15章 查询优化的百科全书——EXPLAIN详解 245
第16章 神兵利器——optimizer trace的神奇功效 270
第17章 调节磁盘和CPU的矛盾——InnoDB的Buffer Pool 278
第18章 从猫爷借钱说起——事务简介 294
第19章 说过的话就一定要做到——redo日志 308
第20章 后悔了怎么办——undo日志 342
第21章 一条记录的多副面孔——事务隔离级别和MVCC 379
第22章 工作面试老大难——锁 401
参考资料 455

把这些全部弄透之后,就可以进入下个阶段,进行一些MySQL数据库的深度优化了。


Level 4:深入优化


到了这个阶段,就不是以看书为主了,是真正意义上的实战为王,理论为辅了。遇到一些数据库瓶颈和问题,你的第一反应是,我可以优化它,而不是抱怨MySQL数据库性能不行。

你需要做到如下几点:

(1)根据当前的系统特性和业务场景,做出合理的表结构设计。如:知道什么地方需要加表冗余字段,什么地方需要根据数据的冷热程度进行垂直拆分,如何设计才能最大限度规避锁征用,多对多情况下的表结构设计,父子情况下的表结构设计等。

(2)给你一条复杂的慢查SQL,分析其执行计划后,无论是通过添加联合索引,通过force index,通过straight join,通过优化表结构,通过重写SQL等方式,将该SQL的性能优化到合理值。

(3)生产环境数据库Dead Lock了,你能够通过日志定位,并快速解决问题。

(4)生成环境数据库宕机了,能够通过DBA提供的信息,迅速排查出性能瓶颈并解决。

(5)大中型系统,在高并发,数据量大的场景下,给出你的表设计方案,分库分表方案,该方案能够满足系统未来五年的增量。

(6)进阶模式,结合于Redis、ES、Kafka,或是Doris、ClickHouse,给出基于系统存储的整体解决方案。该解决方案不但能让各个存储发挥其所长,要尽量规避多存储源导致的一致性问题。

上述几点如果能做到,这基本上可以达到大厂架构师的能力了。


Level 5:产品重建

具备这种能力的人确实不多,但互联网大厂从零开始自研数据库,或是用MySQL改造的,也不在少数。

比如说:我需要数据库的某种特性,但MySQL这些存储引擎都不具备,那我就建个团队,自己动手改源码,为公司内部的业务系统使用。

我所知道的,行业内比较知名的MySQL专家有——姜承尧、丁奇、何登成。

如果你志在于此,那我给你推荐几本书:

《数据库系统概念》


《数据库索引设计与实现》


《数据库系统实现》



另外,MySQL 官方开发手册:
MySQL Internals Manual,这个也非常值得一看。

可以尝试阅读一下MySQL的源码,或是再牛逼一些,给它提交代码,做出一些比较牛逼的特性出来。

当然,除非你专攻数据库这个领域,否则的话,作为一名系统架构师,达到Level 4就可以啦。


文章转载自托尼学长,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论