我正在尝试使用EXPLAIN ANALYZE
诊断慢查询。我是命令的新手,所以我读过http://www.postgresql.org/docs/9.3/static/using-explain.html。查询计划使用“CTE扫描”,但我不知道这是什么,与顺序扫描相比 - 更重要的是,CTE扫描通常意味着查询性能。
答案 0 :(得分:35)
A" CTE扫描"是对CTE术语的具体化结果的顺序扫描(像WITH blah AS (SELECT ...)
这样的CTE中的命名部分,如#34; blah"
物化意味着PostgreSQL已经计算了结果并将它们转换为临时的行存储,它不像视图一样使用CTE。
主要含义是从CTE术语中选择一个小子集并丢弃其余部分会造成大量浪费,因为您丢弃的部分仍必须完全计算。
有关详细信息,请参阅a recent blog post I wrote on the topic。