示例
示例
-- 合并形态:外层条件下推到派生表内部
EXPLAIN SELECT *
FROM (SELECT * FROM orders WHERE user_id = 100) t
WHERE t.status = 'paid';
-- 表名为 <derived2>;出现独立物化行与临时表则说明走了物化
-- 对比:强制不合并
EXPLAIN SELECT /*+ NO_MERGE(t) */ *
FROM (SELECT * FROM orders WHERE user_id = 100) t
WHERE t.status = 'paid';| 合并条件 | 无聚合、DISTINCT、GROUP BY、LIMIT、UNION、窗口函数等阻止合并的结构 |
|---|---|
| 开关 | optimizer_switch 中 derived_merge=on 为默认;可会话级关闭做对比 |
| 8.0.22+ | 物化派生表支持条件下推(derived condition pushdown),减少物化数据量 |