↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

好的 CTE 与坏的 CTE 差在统计信息上 RSS

PostgreSQL 12 之前 CTE 是硬性的优化栅栏,之后规划器会按写法决定内联还是物化。Radim Marek 归纳:只被引用一次的纯 SELECT 会被内联,谓词得以合并,可读性不再有代价;被多次引用的昂贵聚合物化一次更划算。坏处出在物化上,结果落进临时元组存储,没有 pg_statistic 条目,规划器只能退回默认选择率,连接计划因此走偏甚至溢出内存。结果集很大又要多次引用时,带索引和统计的临时表更稳。

发布于 2026-09-10T10:59:38.235692Z · Radim Marek · boringsql
CTE 查询规划

PostgreSQL 12 之前 CTE 是硬性的优化栅栏,之后规划器会按写法决定内联还是物化。Radim Marek 归纳:只被引用一次的纯 SELECT 会被内联,谓词得以合并,可读性不再有代价;被多次引用的昂贵聚合物化一次更划算。坏处出在物化上,结果落进临时元组存储,没有 pg_statistic 条目,规划器只能退回默认选择率,连接计划因此走偏甚至溢出内存。结果集很大又要多次引用时,带索引和统计的临时表更稳。

PostgreSQL 12 之前 CTE 是硬性的优化栅栏,之后规划器会按写法决定内联还是物化。Radim Marek 归纳:只被引用一次的纯 SELECT 会被内联,谓词得以合并,可读性不再有代价;被多次引用的昂贵聚合物化一次更划算。坏处出在物化上,结果落进临时元组存储,没有 pg_statistic 条目,规划器只能退回默认选择率,连接计划因此走偏甚至溢出内存。结果集很大又要多次引用时,带索引和统计的临时表更稳。

原始来源 ↗

来源记录
  • center.info_item · 784d48db0887d472 · 2026-10-03T04:08:35.169032Z
  • pgweb.info_item · 784d48db0887d472 · 2026-10-03T04:08:55.967155Z