- • IN 子查询被优化器自动改写成 semi join
- • 子查询结果物化成临时表(落磁盘)
- • 主表全表扫描 + 每行去临时表里匹配
- • 排查利器:EXPLAIN 后跟 show warnings
- • 解法:改写 SQL 结构(加永假 OR 条件)绕开 semi join
- • possible_keys 有二级索引,key 却是 PRIMARY
- • 优化器算账:二级索引回表 + filesort 不划算
- • 扫聚簇索引凑满 limit 就返回 —— 平时确实快
- • 查不到数据的条件 → 1 亿条全扫 → 慢查询风暴
- • 解法:force index 强制走二级索引
- • EXPLAIN 看访问方式 / 索引选择 / Extra
- • show warnings 看优化器改写后的真实 SQL
- • 怀疑优化器误判 → 实验环境关开关验证
- • 生产落地优先改写 SQL,不动全局参数
- • 上线后持续观察慢查询日志确认效果