19、优化器成本模型:优化器为什么选择这个执行计划你好,我是俊达。 上一讲中,我们通过四十多个SQL,演示了MySQL各种不同的执行计划。对于给定的一个SQL语句,MySQL为什么选择了某一个执行计划,而没有采用其他的执行计划呢?优化器会评估每一个可能的执行计划的成本,从中选择一个成本最低的作为最终...2026-01-19MySQL运维实战课
20、单表查询:如何评估单表访问成本你好,我是俊达。 上一讲中我们介绍了优化器的工作原理,并介绍了全表扫描和索引范围扫描的成本评估方法。在这一讲中,我们继续来学习单表查询的其他几种访问路径:REF、覆盖索引、MRR、Index Merge。最后,我们还将通过一个真实的业务场景,来讨论怎...2026-01-19MySQL运维实战课
21、表连接如何执行你好,我是俊达。 这一讲我们来聊一聊MySQL中的表连接是怎么执行的。 从功能或语法上来看,表连接有内连接(Inner Join)和外连接(Outer Join)。外连接又包括左连接(Left Outer Join)、右连接(Right Outer ...2026-01-19MySQL运维实战课
22、MySQL子查询优化策略你好,我是俊达。 这一讲,我们来讨论子查询的一些优化策略。子查询是SQL很重要的一个能力,平时也不少见。 子查询的一个例子早期MySQL(5.5以及更早的版本)对子查询的支持比较弱,使用子查询时容易遇到性能问题。 在13讲的思考题中,就有一个执行了几...2026-01-19MySQL运维实战课
23、10+ SQL执行性能不佳的真实案例(上)你好,我是俊达。 在第二章 SQL优化篇的前面几讲中,我们比较系统地学习了MySQL中SQL优化的基础知识,包括索引访问的原理、优化器成本模型、表连接的几种算法、表连接顺序的计算、子查询的优化策略。在这一讲里,我整理了工作中遇到过的十多种不同类型的S...2026-01-19MySQL运维实战课
24、10+ SQL执行性能不佳的真实案例(下)你好,我是俊达。这节课我们继续看剩下的几个案例。 案例七:优化or查询的另一个例子下面是另一个在where中使用了or的例子,这个SQL的性能非常差,需要将3个表的数据全部关联起来。 1234567SELECT t_msg.msg_id,t_msg....2026-01-19MySQL运维实战课
25、数据库无法启动,如何读取InnoDB文件中的数据(上)你好,我是俊达。这一讲我们来了解下InnoDB的物理存储格式。 了解物理存储格式有什么作用呢?有时,由于系统表空间或其他物理文件损坏,数据库可能无法启动,即使设置了参数innodb_force_recovery还是无法启动。有时,由于误操作把表DRO...2026-01-19MySQL运维实战课
26、数据库无法启动,如何读取InnoDB文件中的数据(下)你好,我是俊达 这一讲中,我们接着上一讲的内容,介绍InnoDB中B+树的物理结构,以及InnoDB管理数据文件的一些数据结构。 先创建一个测试表,写入一些数据。 123456789101112131415CREATE TABLE t_btree (...2026-01-19MySQL运维实战课
27、InnoDB Buffer Pool 如何提高数据库性能(上)你好,我是俊达。 从前两讲中,我们知道了InnoDB表和索引的物理存储格式。执行Select语句的时候,最终会从ibd文件中获取数据,执行Insert/Update/Delete语句的时候,最终会将数据写入到ibd文件。读取或修改...2026-01-19MySQL运维实战课
28、InnoDB Buffer Pool如何提高数据库性能(下)你好,我是俊达。 上一讲的思考题中,我留了一个问题,就是删除表或索引时,表或索引已经缓存在Buffer Pool中的数据要怎么处理。实际上处理的方式跟表的类型(是普通表还是临时表,是否使用per-table)以及操作类型有关,还跟MySQL的版本有关...2026-01-19MySQL运维实战课