什么是CTE扫描,它对性能的影响是什么?

bbl*_*ack 24 postgresql

我正在尝试使用EXPLAIN ANALYZE.来诊断慢查询.我是命令的新手所以我已经阅读了http://www.postgresql.org/docs/9.3/static/using-explain.html.查询计划使用"CTE扫描",但我不知道这是什么,与顺序扫描相比 - 更重要的是,CTE扫描通常意味着查询性能.

Cra*_*ger 41

"CTE扫描"是对CTE术语的实现结果的顺序扫描(CTE中的命名部分如"blah")WITH blah AS (SELECT ...).

物化意味着PostgreSQL已经计算了结果并将它们转换为临时的行存储,它不仅仅像使用CTE那样使用CTE.

主要含义是从CTE术语中选择一个小子集并丢弃其余部分会造成大量浪费,因为丢弃的部分仍必须完全计算.

有关详细信息,请参阅我在该主题上撰写的最新博文.

  • PostgreSQL 12 具有自动、可重写的内联功能,使用“WITH x as [NOT] MATERIALIZED”,可能会提高此类查询的性能([文档](https://www.postgresql.org/docs/12/queries-with.html)) 。 (6认同)