📓 Archive

14_RULE-BASED-OPTIMIZATION

Create:2025/05/31 b9f0d6b Update:2025-05-31

  • 开场序言 #

    Caution

    大家别忘了 MySQL 本质上是一个软件,设计 MySQL 的大叔并不能要求使用这个软件的人个个都是数据库高高手,就像我写这本书的时候并不能要求各位在学之前就会了里边儿的知识。(吐槽一下:都会了的人谁还看呢,难道是为了精神上受感化?)
    也就是说我们无法避免某些同学写一些执行起来十分耗费性能的语句。即使是这样,设计 MySQL 的大叔还是依据一些规则,竭尽全力的把这个很糟糕的语句转换成某种可以比较高效执行的形式,这个过程也可以被称作 查询重写 (就是人家觉得你写的语句不好,自己再重写一遍)。本章详细唠叨一下一些比较重要的重写规则。

  • 条件化简 #

    • 移除不必要的括号 #

    • 常量传递(constant_propagation) #

    • 等值传递(equality_propagation) #

    • 移除没用的条件(trivial_condition_removal) #

    • 表达式计算 #

    • HAVING子句和WHERE子句的合并 #

    • 常量表检测 #

  • 外连接消除 #

  • 子查询优化 #

    • 子查询语法 #

      • 按返回的结果集区分子查询 #

      • 按与外层查询关系来区分子查询 #

      • 子查询在布尔表达式中的使用 #

      • 子查询语法注意事项 #

    • 子查询在MySQL中是怎么执行的 #

      • 小白们眼中子查询的执行方式 #

      • 标量子查询、行子查询的执行方式 #

      • IN子查询优化 #

      • ANY/ALL子查询优化 #

      • [NOT] EXISTS子查询的执行 #

      • 对于派生表的优化 #


comments powered by Disqus