小编sor*_*ell的帖子

Postgres 12 的 NOT MATERIALIZED 指令有副作用吗?

我正在对我公司的一些 SQL 进行一些性能基准测试,将 PG10 与 PG12 进行比较。我们在代码中使用了很多CTE,而 PG12 并没有对 CTE 进行原生优化,因此 PG10 和 PG12 之间的性能是相同的。

我的下一个实验是将NOT MATERIALIZED指令添加到 CTE,结果令人震惊:它大大缩短了查询时间(在某些情况下将它们减半)。

在这里读到这MATERIALIZED是 PG12 之前的默认功能。该功能会将 CTE 的所有内容写入一个临时位置。

所以我的问题主要是NOT MATERIALIZED

  1. 与 相比,该NOT MATERIALIZED功能对幕后的数据MATERIALIZED有何作用?
  2. NOT MATERIALIZED在重构我们的代码库之前,我应该注意哪些副作用?

postgresql optimization execution-plan postgresql-12

3
推荐指数
1
解决办法
1439
查看次数