2

我通过解释分析得到以下输出:

Nested Loop Anti Join  (cost=0.00..36.92 rows=83 width=3) (actual time=0.303..1 0.631 rows=83 loops=1)
->  Seq Scan on paises p  (cost=0.00..5.46 rows=246 width=3) (actual time=0.0 43..0.336 rows=246 loops=1)
->  Index Scan using ciudades_pkey on ciudades c  (cost=0.00..12.92 rows=192 width=3) (actual time=0.038..0.038 rows=1 loops=246)
      Index Cond: (c.pais_codigo = (p.pais_codigo)::bpchar)
Total runtime: 10.897 ms
(5 rows)

我不明白为什么循环反连接成本为 36.92。

在其他站点中,我看到了循环的公式:上部扫描成本 + 上部行 * 内部成本。

但我的成本是 36.92,所以没办法。dbmanager 如何解决此查询?

4

1 回答 1

1

请参阅PostgreSQL 源代码中的initial_cost_nestloop和 final_cost_nestloop 以了解其计算方式的确切算法。

优化器正在考虑内部关系的第一次和重复扫描之间的差异,以及对于反连接只有索引扫描的第一个匹配项可以被处理的事实。加入这两个关系的 CPU 成本被添加到子计划成本之上。

于 2012-11-06T12:32:52.250 回答