什么是派生表?
派生表(Derived Table):指的是 SQL 查询中用子查询生成的临时表,通常写在 FROM
子句中。
例如:
SELECT t.name, t.total
FROM (
SELECT name, SUM(price) AS total
FROM orders
GROUP BY name
) AS t
WHERE t.total > 100;
上面 FROM (...) AS t
就是一个 派生表。
派生表物化是什么意思?
派生表物化(Derived Table Materialization) 指的是数据库在执行 SQL 查询时,会 先执行子查询(即派生表部分),并将结果 存储为临时表(物化),然后在外部查询中使用这个临时表。
换句话说:
-
“物化” = “落地为临时表”
-
执行顺序是:先执行子查询 ➜ 临时表 ➜ 外层查询操作
派生表物化 vs 非物化
类型 | 执行方式说明 |
---|---|
物化派生表 | 先完整执行子查询,将结果放入临时表,再进行外层查询。 |
非物化派生表 | 将子查询内联进主查询,可能重复执行,提高灵活性但代价大。 |
是否物化取决于:
-
数据库的查询优化器(MySQL 8.0+ 更智能)
-
派生表是否包含聚合、排序、LIMIT 等
-
派生表是否被多次引用
-
是否启用
optimizer_switch = 'derived_merge=on/off'