如何使用 PostgreSQL 的 EXPLAIN 和 ANALYZE 来识别查询中的慢连接?

问题描述 投票:0回答:1

我正在开发一个包含多个表的 PostgreSQL 数据库,每个表包含数百万行。我的一些具有多个联接的查询运行速度比预期慢,我想使用 EXPLAIN 和 ANALYZE 工具来确定根本原因。

具体来说,我想了解:

  • 我应该在 EXPLAIN 和 ANALYZE 的输出中寻找什么来检测连接操作中的低效率?
  • 如何解释查询计划每个步骤的成本估算和行数?
  • 查询计划中是否存在表明需要索引或重组查询的常见模式或危险信号?

**这是我的一个查询的简化版本: ** 选择a.名称,b.详细信息 FROM 表_a JOIN table_b b ON a.id = b.a_id WHERE a.status = '活动';

sql postgresql join sqlperformance
1个回答
0
投票

我寻找四件事:

  • EXPLAIN (ANALYZE)
    输出中的行计数错误估计。如果估计行数与实际行数之间存在十倍或更多的系数,则表明存在问题。尝试改进估计。

  • 需要花费大量时间的执行计划节点。如果你加快速度,你就会有所收获。您必须从较高的节点中减去较低的节点才能获得净时间。不要忘记乘以

    loops
    计数!

  • EXPLAIN (ANALYZE, BUFFERS)
    输出中使用的总缓冲区。同样,您必须减去较低的节点。我认为缓冲区计算查询的“足迹”。努力把它放下,你就会赢。

  • 检查是否有过多的“过滤器删除的行”。更好的索引通常会提高性能。

还有其他东西,例如“堆获取”和临时缓冲区,但以上是最重要的东西。

使用像https://explain.depesz.com这样的计划分析工具将使分析变得更加容易。

© www.soinside.com 2019 - 2024. All rights reserved.