专栏
下载APP
一线数据库工程师带你深入理解 MySQL
你的数据库优化管理第一课
马听老师 · 一线数据库工程师

共计33节 · 已更新34节

3340人已订阅

课程亮点

  • 实际案例帮助理解多种场景下 SQL 的优化技巧与原理
  • 精心绘制原理图辅助深入理解 B+ 树索引原理
  • 掌握在 MySQL 的锁机制下如何减少锁冲突、提高并发的相关技术
  • 具备高效事务系统的实现能力
  • 讲师的实际工作经验总结与干货分享
  • 每个小节搭配对应讨论题目,帮助深入理解学习成果

课程介绍

互联网刚开始进入国内时,使用比较多的都是昂贵的商业数据库。但在最近几年,一批开源数据库开始慢慢成为主流,其中最为突出的则是 MySQL。

根据 DB-Engines 七月份的最新统计(如下图,截图内容来源于:https://dbengines.com/en/ranking_osvsc ), MySQL 仍然是最受欢迎的开源数据库:
图片描述
MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 的 SQL “结构化查询语言”,是用于访问数据库的最常用标准化语言。MySQL 软件采用了 GPL(GNU 通用公共许可证),由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本,而选择 MySQL 作为其网站数据库。

综上所述,MySQL 的优势如下:

・MySQL 是开源的,无需支付额外费用;
・MySQL 使用标准的 SQL 数据语言形式;
・MySQL 可以运行于多个系统上,并且支持多种语言,包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等;
・MySQL 对 PHP 有很好的支持,PHP 是目前最流行的 Web 开发语言;
・MySQL 可以定制, 采用 GPL 协议,可修改源码来开发自己的 MySQL 系统。

从 MySQL 作为最流行的关系型数据库管理系统,以及在众多数据库中的明显优势来讲,可想而知,企业对 MySQL 的相关人才需求量是非常大的。那要怎么去学习 MySQL 呢?有很多人觉得学习 MySQL 只要学会怎么写 SQL 语句就行,这种观点其实是片面的。很多时候,等正式业务的数据量和 QPS 上来后,可能会由于部分低效率的 SQL 而拖慢整个数据库,也有可能由于事务设计不合理导致死锁,甚至可能有被 SQL 注入的风险等,所以表设计、SQL 优化、事务、锁等也必须要引起我们的重视。

本专栏的目的不仅是一起讨论如何高效、安全地使用 MySQL,更希望大家通过专栏内容的学习,成为能够对数据库或者 SQL 语句进行优化的综合型数据库使用者,进阶自己在数据库领域的相关技能。

讲师马听,一线 DBA (数据工程师)老兵。擅长 MySQL 优化, 技术公众号 《MySQL 数据库联盟》运营者。

本专栏分为 5 个模块,共 32 小节,课程结构与知识脉络如下:

图片描述
第一部分:SQL 优化

本部分介绍了 SQL 的常见优化方式,如 join、order by、group by、insert、count (*) 等。

第二部分:MySQL 索引

本部分主要对 “某个字段加唯一索引还是普通索引?”,“某条查询某个条件字段有索引,为什么不走这个索引?” 等相关问题给予解答,此外还介绍了索引的原理和联合索引的一些特性。

第三部分:MySQL 锁

本部分介绍了常见的锁场景。对于一个数据库来说,如何保证数据访问的一致性、有效性显得格外重要,因此使用者也应该去探究数据库的锁机制。

第四部分:事务

数据库正确执行的四个基本要素:

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)

本部分将进行详细描述 MySQL 是通过哪种机制去实现满足这四个数据库正确执行的基本要素。

第五部分:MySQL 的一些其它相关经验

本部分主要讨论讲师个人在使用 MySQL 的过程中曾讨论过的一些重要问题,如读写分离、查询缓存、分库分表等。

查看全部
专栏目录
目录
适合人群
  • 开发工程师
  • 运维工程师
  • MySQL DBA
  • 架构师
  • 其他 MySQL 爱好者
购买须知
  1. 本专栏为图文形式内容服务,共计 33 小节,上线时间为 2019 年 7 月 30 日,预计 2019 年 11 月 10 日更新完成;
  2. 本专栏更新时间为每周二、四更新 1 篇(法定节假日顺延),形式为图文;
  3. 订阅成功后,用户即可通过慕课网 PC 端、App 端、WAP 端享有永久阅读的权限;
  4. 慕课专栏为虚拟内容服务,订阅成功后概不退款;
  5. 在专栏阅读过程中,如有任何问题,请邮件联系 kf@imooc.com;
  6. 慕课专栏版权归本平台所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布 / 发表,违者将依法追究责任。
0 / 2
登录后可任选 2 个小节免费阅读
慕前端7009556

我完全看完的,还在我们公司做了分享... 谢谢老师,学到了很多。

2019-11-17
3
慕雪3119260

不得不说,结尾处的四个生活实例可太形象了!!为老师点赞!!

讲师回复:感谢同学支持,看来列举的这些例子达到预期效果了。
2019-09-27
1
lixiaomuke

很喜欢老师的这种专栏写作风格,重点突出,通俗易懂,与实际情况结合等等

讲师回复:谢谢啦,感谢订阅和认可。
2019-09-17
0
慕虎434753

嗯,总结的不错,点赞。

讲师回复:谢谢欣赏,欢迎推荐给好友哟
2019-12-05
1
决明子_0001

收益丰富

讲师回复:谢谢同学,欢迎订阅哟。
2019-10-06
1
慕雪3119260

不得不说,MyCAT 真的是神来之笔!!!

讲师回复:对开发来说,分库分表使用 MyCAT 就比较方便了,但是 DBA 的工作量会稍微大点。
2019-10-19
2
慕无忌8331556

文章写得很精彩,可是工作中遇到过难以优化而又因为业务需求不得不执行低效率查询的SQL语句,这样的问题应该如何去解决?

讲师回复:你好,可以考虑把低效并且没办法再优化的查询语句放到Es里。
2019-08-30
5
王义航11

我就看明白了个慢查询这三个字 抓狂 我目前不是计算机专业 救救孩子的头发吧 嘿嘿嘿(老师讲的很好哦 推荐 )

讲师回复:同学你好,我知道的身边很多大牛都不是计算机专业毕业的哟,相信专栏能帮到你哈。如果有问题,欢迎在留言区留言哟。
2019-09-18
1
chDreamSeeker

老师写的真好,解除了多年的疑惑,和不解

讲师回复:感谢认可,后面的阅读有疑问,也欢迎留言哈
2019-09-17
0
王义航11

谢谢老师分享

讲师回复:欢迎购买哟,如果有问题,也欢迎在留言区讨论哈。
2019-09-18
3
yang_绿叶

买啦,我数据库一直就会一点增删改查什么的,弱弱的问下老师,这样能够看懂嘛!期待这次能有提高。

讲师回复:我们这个专栏有很多地方在讲解优化前都会补充一些基础知识的,同学应该可以看懂的,当然,如果有些地方没理解或者我讲的不清楚,欢迎在留言区留言哈^^
2019-07-30
2
慕雪3119260

老师,问一个问题,什么时候使用聚集索引?什么时候使用辅助索引呢?咱们课件中的查询语句,使用哪个的多呢?

讲师回复:同学你好,好问题,InnoDB 的数据是按照主键顺序存放的,而聚集索引就是按照每张表的主键构造一颗 B+ 树,它的叶子节点存放的是整行数据。当通过辅助索引来寻找数据时,InnoDB 存储引擎会遍历辅助索引树查找到对应记录的主键,然后通过主键索引来找到对应的行数据。比如一颗高度为 3 的辅助索引树中查找数据,那需要对这颗辅助索引树遍历 3 次找到指定主键,如果聚集索引树的高度也为 3,那么还需要对聚集索引树进行 3 次查找,最终找到一个完整的行数据所在的页,因此获取数据一共需要6 次逻辑 IO 访问。因此如果你知道要查的某一行数据的主键,就最好用主键(聚集索引)查询。课件中普通索引用的多,因为工作中大多数使用普通索引做为条件查的。当然具体区别在第10节有详细讲解。
2019-08-13
3
慕仙6214147

老师您好,unique_subquery和index_subquery,基于老师创建的两个表,始终无法在explain的时候实现type为这两个值的,还请老师指导一下实现这两个属性值的sql语句。

讲师回复:你好,基于本节的两张表,两种类型对应的SQL语句例子如下: unique_subquery:explain select * from t1 where a in (select id from t2 where t1.b=t2.b) or a=10; index_subquery:explain select * from t1 where a in (select a from t2 where t1.b=t2.b) or a=10;
2019-08-16
2
社会我的哥

工作这几年为了解决平时遇到MySQL的问题也看过很多大V的文章,这次可以系统的学习下,挺好

讲师回复:欢迎欢迎,不管是专栏中的问题还是工作中遇到的 MySQL问题,都欢迎在留言区讨论哈。
2019-07-30
3
小爱仙子

老师好,我刚毕业入职不久,对大数据很感兴趣,现在在做大数据,但是公司的大数据开发岗位好像和想象的不太一样。更多的是写SQL,python或者shell脚本处理数据。想问的是,这个技术方向我自己需不需要掌握SQL优化的技能?谢谢啦

讲师回复:同学你好,需要的。这边提到了现在工作中更多的情况是写SQL,所以是要掌握SQL优化的,你的SQL语句写的好的话,可以大大提升查询效率。另外看你工作中有一部分是数据处理,咱们专栏后面也会有篇数据处理优化的文章,第5节数据导入的优化,同学可以学习下,希望可以帮助你的工作,祝学习愉快~~
2019-07-30
2
桂林山水甲天下

《高性能MySQL》这本书看完了,学习到了很多优化的技巧,不过很多都是基于之前的版本。跟着这个MySQL优化的专栏再学习一遍,希望能够学习一些新的版本的知识就更好了。

讲师回复:哈哈是的呢同学, 《高性能MySQL》是一本不错的书,强力推荐;这本书是基于MySQL 5.5或更早版本写的。本专栏是基于 5.7.21版本来讲述的,会有些新的优化思路,欢迎订阅哈。
2019-07-30
6
村舍青瓦

老师您好: 首先要感谢您的分享总结,您以上的知识扩展在我的线上环境都出现过。 一般情况都是慢sql 语句没有使用索引,我们所有线上的数据库,全部部署了实时kill 脚本,针对查询语句全部进行一个阀值的制定,例如是5秒,超过以后自动kill,这样会保证线上的稳定。 二就是在测试环境严格把控没有使用索引的语句。希望能够了解到更多地优化技巧。

讲师回复:好方法。当然正式环境如果要开启自动kill,可能需要看业务场景去设定阀值,还要考虑到不能kill 掉管理语句(比如加字段操作)。
2019-07-30
3
董咚咚董

通过开篇这一节的阅读,我感受到了老师的真心传授,推荐了好几本我看过的书了,特别实在,我也是大学时候就开始自学数据库了,没有那么多实际的工作经验,所以就只能先跟着前人的脚步来走,看看别人是怎么来做优化的,踩过的坑遇到的麻烦。 希望老师会有很多工作的实际场景在文章里,谢谢

讲师回复:会的同学,我在专栏内分享了很多自己在工作中实际案例场景,遇到的问题及其解决方案,总结了优化的技巧和心得分享,感兴趣的话欢迎订阅哈^^
2019-07-30
4
— 造烛求明,读书求理 —
¥46.00
立即购买