首页 > 解决方案 > PostgreSQL 12 CTE 物化选项何时提供优化优势?

问题描述

编辑:我已经这个问题移到了,dba.stackexchange因为我收到了该社区可以更好地解决我的问题的建议。

我一直在阅读 PostgreSQL 的新 CTE 功能——MATERIALIZED 或 NOT MATERIALIZED 关键字——它可以在某些情况下提供额外的优化机会,前提是这样做是安全的。此处对此 PostgreSQL 更新的评论说:

...用户可以通过指定 MATERIALIZED 来强制旧行为 [LESS OPTIMIZED];当查询故意使用 WITH 作为优化栅栏以防止错误选择计划时,这主要是有用的。

我一直在想,考虑到在某些情况下使用 CTE 优化(NOT MATERIALIZED 关键字)是安全的,在这种情况下,优化程度较低的“MATERIALIZED”关键字可以“防止计划选择不当”,如报价或提供更好的计划?

标签: postgresqlcommon-table-expressionpostgresql-12

解决方案


它指的是内联子查询可能导致查询速度慢和 CTE(它作为优化栅栏避免这种情况)。这是一个示例错误


推荐阅读