【发布时间】:2020-10-20 03:39:53
【问题描述】:
我们有一个加载数据然后在 PostgreSQL 中进行数据质量控制的系统。 QC 功能的性能在我们的其中一种环境中波动很大,没有明显的规律。我能够在 QC 函数中跟踪以下简单查询的性能:
WITH foo AS (SELECT full_address, jsonb_agg (gad_rec_id) gad_rec_ids
FROM azgiv.v_full_addresses
WHERE gad_gly_id = 495
GROUP BY full_address
HAVING count(1) > 1)
SELECT gad_nguid, gad_rec_id, foo.full_address
FROM azgiv.v_full_addresses JOIN foo
ON foo.full_address = v_full_addresses.full_address
AND v_full_addresses.gad_gly_id = 495;
当我遇到性能缓慢的情况(图 2)时,我必须在查询计划更改为快速之前分析视图后面的表(图 1)。 v_full_addresses 是一个分区表的简单视图,其中包含一系列连接的列。
这是上述查询的查询计划的两张图片。在了解查询优化方面,我是新手,非常感谢任何帮助。
【问题讨论】:
-
图像难以阅读且包含的信息很少。您应该将
EXPLAIN (ANALYZE, BUFFERS)显示为文本。 -
这可能是 StackOverflow 的拼写错误或简化,但据我所知,
jsonb_agg()的结果在查询中的任何地方都没有使用;将其排除在外可能会为您节省一些 CPU 周期。另外,如果我可能会问,您使用什么来创建这些查询计划图? -
@deroby 我使用 PgAdmin IV 生成图表。
标签: postgresql query-optimization