MySQL实战45讲

MySQL实战45讲 / 从原理到实战,丁奇带你搞懂MySQL

林晓斌 网名丁奇,腾讯云数据库负责人
  • 课程目录
  • 课程介绍
  • 在线阅读:开篇词 | 这一次,让我们一起来搞懂MySQL

    我希望这个专栏能够激发开发者对数据库原理的探索欲,从而更好地理解工作中遇到的问题,更能知道背后的为什么。

  • 01 | 基础架构:一条SQL查询语句是如何执行的?

    今天我给你介绍了MySQL的逻辑架构,希望你对一个SQL语句完整执行流程的各个阶段能有一个初步的印象。

  • 02 | 日志系统:一条SQL更新语句是如何执行的?

    今天这篇文章,主要介绍了MySQL里面最重要的两个日志,即物理日志redo log和逻辑日志binlog。

  • 03 | 事务隔离:为什么你改了我还看不见?

    我介绍了MySQL的事务隔离级别的现象和实现,根据实现原理分析了长事务存在的风险,以及如何用正确的方式避免长事务。

  • 04 | 深入浅出索引(上)

    今天我们来聊聊引擎的数据结构模型,来帮助你理解MySQL为什么选择B+树结构来存储数据。

  • 05 | 深入浅出索引(下)

    在满足语句需求的情况下, 尽量少地访问资源是数据库设计的重要原则之一。

  • 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?

    今天,我跟你介绍了MySQL的全局锁和表级锁。

  • 07 | 行锁功过:怎么减少行锁对性能的影响?

    今天,我和你介绍了MySQL的行锁,涉及了两阶段所协议、死锁和死锁检测这两大部分内容。

  • 08 | 事务到底是隔离的还是不隔离的?

    普通查询语句是一致性读,一致性读会根据一致性视图来决定数据版本的可见性。

  • 09 | 普通索引和唯一索引,应该怎么选择?

    我从普通索引和唯一索引的选择开始,和你分享了数据的查询和更新过程,然后说明了change buffer的机制......

  • 10 | MySQL为什么有时候会选错索引?

    今天,我要和你聊聊索引统计的更新机制,以及优化器选错索引了应该如何处理。

  • 11 | 怎么给字符串字段加索引?

    在今天这篇文章中,我跟你聊了聊字符串字段创建索引的场景。

  • 12 | 为什么我的MySQL会“抖”一下?

    我延续第2篇中介绍的WAL的概念,和你解释了这个机制后续需要的刷脏页操作和执行时机。利用WAL技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能。

  • 13 | 为什么表数据删掉一半,表文件大小不变?

    今天这篇文章,我和你讨论了数据库中回收表空间的方法。

  • 14 | count(*)这么慢,我该怎么办?

    今天,我和你聊了聊MySQL中获得表行数的几种方法。

  • 15 | 答疑文章(一):日志和索引相关问题

    我针对前14篇文章,大家在评论区中的留言,从中摘取了关于日志和索引的相关问题,串成了今天这篇文章。

  • 16 | “order by”是怎么工作的?

    今天这篇文章,我和你介绍了MySQL里面order by语句的几种算法流程。

  • 17 | 如何正确地显示随机消息?

    今天这篇文章,我是借着随机排序的需求,跟你介绍了MySQL对临时表排序的执行过程。

  • 18 | 为什么这些SQL语句逻辑相同,性能却差异巨大?

    今天我给你举了三个例子,其实是在说同一件事儿,即:对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。

  • 19 | 为什么我只查一行的语句,也执行这么慢?

    我给你举了在一个简单的表上,执行“查一行”,可能会出现的被锁住和执行慢的例子。这其中涉及到了表锁、行锁和一致性读的概念。

  • 20 | 幻读是什么,幻读有什么问题?

    今天我们从上一篇文章的课后问题说起,提到了全表扫描的加锁方式。我们发现即使给所有的行都加上行锁,仍然无法解决幻读问题,因此引入了间隙锁的概念。

  • 21 | 为什么我只改一行的语句,锁这么多?

    这些加锁规则我没在别的地方看到过有类似的总结,以前我自己判断的时候都是想着代码里面的实现来脑补的。这次为了总结成这个规则,我又重新刷了代码。

  • 22 | MySQL有哪些“饮鸩止渴”提高性能的方法?

    今天这篇文章,我以业务高峰期的性能问题为背景,和你介绍了一些紧急处理的手段。

  • 23 | MySQL是怎么保证数据不丢的?

    今天这篇文章,我着重和你介绍的是MySQL是“怎么保证redo log和binlog是完整的”。

  • 24 | MySQL是怎么保证主备一致的?

    今天这篇文章,我给你介绍了MySQL binlog的格式和一些基本机制,是后面我要介绍的读写分离等系列文章的背景知识,希望你可以认真消化理解。

  • 25 | MySQL是怎么保证高可用的?

    在实际的应用中,我更建议使用可靠性优先的策略。毕竟保证数据准确,应该是数据库服务的底线。在这个基础上,通过减少主备延迟,提升系统的可用性。

  • 26 | 备库为什么会延迟好几个小时?

    在今天这篇文章中,我和你介绍了MySQL的各种多线程复制策略。

  • 27 | 主库出问题了,从库怎么办?

    如果你使用的MySQL版本支持GTID的话,我都建议你尽量使用GTID模式来做一主多从的切换。

  • 28 | 读写分离有哪些坑?

    在今天这篇文章中,我跟你介绍了一主多从做读写分离时,可能碰到过期读的原因,以及几种应对的方案。

  • 29 | 如何判断一个数据库是不是出问题了?

    今天,我和你介绍了检测一个MySQL实例健康状态的几种方法,以及各种方法存在的问题和演进的逻辑。

  • 30 | 答疑文章(二):用动态的观点看加锁

    今天这篇文章,我用前面第20和第21篇文章评论区的几个问题,再次跟你复习了加锁规则。并且,我和你重点说明了,分析加锁范围时,一定要配合语句执行逻辑来进行。

  • 31 | 误删数据后除了跑路,还能怎么办?

    今天,我和你讨论了误删数据的几种可能,以及误删后的处理方法。但,我要强调的是,预防远比处理的意义来得大。

  • 32 | 为什么还有kill不掉的语句?

    在今天这篇文章中,我首先和你介绍了MySQL中,有些语句和连接“kill不掉”的情况。

  • 33 | 我查这么多数据,会不会把数据库内存打爆?

    今天,我用“大查询会不会把内存用光”这个问题,和你介绍了MySQL的查询结果,发送给客户端的过程。

  • 34 | 到底可不可以使用join?

    今天,我和你介绍了MySQL执行join语句的两种可能算法,这两种算法是由能否使用被驱动表的索引决定的。而能否用上被驱动表的索引,对join语句的性能影响很大。

  • 35 | join语句怎么优化?

    今天,我和你分享了NLJ和BNL的优化方法。

  • 36 | 为什么临时表可以重名?

    今天这篇文章,我和你介绍了临时表的用法和特性。

  • 37 | 什么时候会使用内部临时表?

    通过今天这篇文章,我重点和你讲了group by的几种实现算法,并总结了一些使用的指导原则。从中,我还和你一起分析了MySQL什么时候会使用内部临时表的问题。

  • 38 | 都说InnoDB好,那还要不要使用Memory引擎?

    我从“要不要使用内存表”这个问题展开,介绍了Memory引擎的几个特性,并和你分享了Memory引擎的适用场景。

  • 39 | 自增主键为什么不是连续的?

    今天这篇文章,我从“自增主键为什么会出现不连续的值”这个问题开始,和你讨论了自增值的存储、修改机制、修改时机,以及自增锁的优化。

  • 40 | insert语句的锁为什么这么多?

    insert语句是一个很轻量的操作。不过,这个结论对于“普通的insert语句”才有效。为什么这么说?今天,我要跟你介绍的就是几种insert语句的特殊情况。

  • 41 | 怎么最快地复制一张表?

    今天这篇文章,我和你介绍了三种将一个表的数据导入到另外一个表中的方法,分别是:mysqldump方法、导出CSV文件方法,以及物理拷贝方法。

  • 42 | grant之后要跟着flush privileges吗?

    今天这篇文章,我和你介绍的是MySQL用户权限在数据表和内存中的存在形式,以及grant和revoke命令的执行逻辑。

  • 43 | 要不要使用分区表?

    这篇文章,我主要和你介绍的是server层和引擎层对分区表的处理方式。

  • 44 | 答疑文章(三):说一说这些好问题

    在我看来,能够帮我们扩展一个逻辑的边界的问题,就是好问题。

  • 45 | 自增id用完怎么办?

    今天这篇文章,我给你介绍了MySQL不同的自增id达到上限以后的行为。

  • 直播回顾 | 林晓斌:我的 MySQL 心路历程

    在专栏上线后的11月21日,我来到极客时间做了一场主题是“我的MySQL心路历程”的直播。今天,我特意将这个直播的回顾文章,放在了专栏下面。

  • 结束语 | 点线网面,一起构建MySQL知识网络

    在我的理解里,介绍数据库的文章需要有操作性,每一个操作有相应的原理,每一个原理背后又有它的原理,这是一个链条。

  • 结课测试|这些MySQL知识你都掌握了吗?

    学习的知识和技能有多少转化成自己的了?一起来测一测。

49讲

你将获得

  • 腾讯云数据库负责人独家经验分享;
  • MySQL 核心技术详解与原理说明;
  • 36 个 MySQL 常见痛点问题解析;
  • 完整的 MySQL 学习路径。

讲师介绍


课程介绍

在专栏中,丁奇结合自己十多年来,通过 MySQL 源码找答案的经历,梳理了 MySQL 的主线知识,比如事务、索引、锁等;并基于这条主线,带你缕清概念、机制、原理、案例分析以及本质,让你真正能掌握 MySQL 核心技术与底层原理。

值得一提的是,每篇文章中都附有实践案例,给你从理论到实战的系统性指导,让你少走弯路,彻底搞懂 MySQL。

本课程共包括两大模块。

模块一,基础篇。为你深入浅出地讲述 MySQL 核心知识,涵盖 MySQL 基础架构、日志系统、事务隔离、锁等内容。

模块二,实践篇。将从一个个关键的数据库问题出发,分析数据库原理,并给出实践指导。每个问题,都不只是简单地给出答案,而是从为什么要这么想、到底该怎样做出发,让你能够知其所以然,都将能够解决你平时工作中的一个疑惑点。


课程目录


特别放送

免费领取福利



限时活动推荐


订阅须知

随机推荐

可复美椭圆型使用怎么样?真相揭秘实际情况!

怡颗莓蓝莓评测值得入手吗?性能评测介绍?

怡颗莓蓝莓推荐哪款?用户反馈评测结果!

特仑苏牛奶乳品分享一下使用心得?老司机评测分享?

艾惟诺婴童护肤是否值得入手?图文评测爆料分析!

vivovivo Pad3 Pro点评怎么样?良心点测!