You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Trino/Presto SQL(Athena)中CTE场景下Projection Pushdown是否生效?

Projection Pushdown在CTE场景下的生效情况分析

先看你给出的查询语句:

WITH data_table AS (
    SELECT * FROM table
)
SELECT id FROM data_table

核心结论

绝大多数现代查询引擎(如PostgreSQL、Spark SQL、BigQuery、MySQL 8.0+等)都会正常应用Projection Pushdown,只会扫描并加载表中的id列,不会读取所有列造成内存浪费。

具体原因

查询引擎的优化器会执行逻辑查询重写,把CTE的定义和外层查询合并,最终等价于直接执行:

SELECT id FROM table

优化器能识别出最终仅需id列,会忽略CTE里的SELECT *,将投影操作下推到数据源扫描阶段,只读取目标列。

例外场景

少数情况Projection Pushdown可能不生效:

  • 部分老版本数据库(如MySQL 5.x)对CTE的优化支持有限,会先执行CTE的SELECT *读取全列,再过滤出id列;
  • 如果CTE被显式标记为MATERIALIZED(比如PostgreSQL的WITH data_table AS MATERIALIZED (...)),引擎会先物化CTE结果(读取所有列),再从物化结果中提取id列,此时投影下推不生效。

内容的提问来源于stack exchange,提问作者Shankar ARUL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:35:26