web-dev-qa-db-ja.com

PSQLのネストされた結合とマージ結合とハッシュ結合

私はどのように知っています

  1. ネストされた結合
  2. 結合を結合
  3. ハッシュ結合

作品とその機能。

これらの結合がPostgresで使用されている状況を知りたい

18
vinieth

以下にいくつかの経験則を示します。

  • ネストされたループ結合は、結合のいずれかの側に行がほとんどない場合に優先されます。結合条件が等値演算子を使用しない場合、ネストされたループ結合も唯一のオプションとして使用されます。

  • ハッシュ結合は、結合条件が等値演算子を使用し、結合の両側が大きく、ハッシュがwork_mem

  • 結合の結合は、結合条件が等値演算子を使用し、結合の両側が大きい場合に推奨されますが、結合条件で効率的にソートできます(たとえば、結合列にインデックスがある場合) )。

1つのテーブルから1つの行のみを選択し、別のテーブルから関連する行を選択する一般的なOLTPクエリは、常にalwaysを使用します唯一の効率的な方法として、ネストされたループ結合。

多くの行を持つテーブルを結合するクエリ(結合の前に除外できない)は、ネストされたループ結合では非常に非効率的であり、常にalwaysハッシュを使用しますまたは、結合条件で許可されている場合は結合を結合します。

オプティマイザーは、これらの各結合戦略を検討し、最低コストを約束するものを使用します。この決定の基礎となる最も重要な要素は、結合の両側からの推定行数です。その結果、誤ったオプティマイザーの選択は通常、行カウントの誤推定によって引き起こされます。

21
Laurenz Albe