2

Explain Analyst を使用して次の出力を取得しています。

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 を参照してください。

オプティマイザーは、内部リレーションの最初のスキャンと繰り返されるスキャンの違い、およびアンチ結合の場合、インデックス スキャンの最初の一致のみが処理される可能性があるという事実を考慮に入れています。サブプランのコストに加えて、2 つの関係を結合するための CPU コストが追加されます。

于 2012-11-06T12:32:52.250 に答える