- • 各种改写看着琐碎,本质都是一件事:优化语义清晰度
- • 常量传播让"能提前算出来的"提前算出来
- • 等值推导 + 常量替换:join 条件里引入常量后直接物化那一行
- • 改写后的 SQL 更方便在索引和数据页里执行查找
- • 子查询的 WHERE 依赖外层表的字段值
- • 外层每一条数据都要执行一遍子查询
- • 相当于隐藏的嵌套循环,行数一大就失控
- • 写 SQL 时优先考虑改写成 JOIN 或分步查询
- • 第一级:子查询结果物化成带索引的临时表
- • 第二级:谁小扫谁 —— 物化表小就反过来驱动外层
- • 终极形态:整个查询改写为 semi join 半连接
- • semi join 只判断"存在匹配",不关心匹配几行
- • 与 IN 子查询语义完全等价,由内核自动选择