私はどのように知っています
作品とその機能。
これらの結合がPostgresで使用されている状況を知りたい
以下にいくつかの経験則を示します。
ネストされたループ結合は、結合のいずれかの側に行がほとんどない場合に優先されます。結合条件が等値演算子を使用しない場合、ネストされたループ結合も唯一のオプションとして使用されます。
ハッシュ結合は、結合条件が等値演算子を使用し、結合の両側が大きく、ハッシュがwork_mem
。
結合の結合は、結合条件が等値演算子を使用し、結合の両側が大きい場合に推奨されますが、結合条件で効率的にソートできます(たとえば、結合列にインデックスがある場合) )。
1つのテーブルから1つの行のみを選択し、別のテーブルから関連する行を選択する一般的なOLTPクエリは、常にalwaysを使用します唯一の効率的な方法として、ネストされたループ結合。
多くの行を持つテーブルを結合するクエリ(結合の前に除外できない)は、ネストされたループ結合では非常に非効率的であり、常にalwaysハッシュを使用しますまたは、結合条件で許可されている場合は結合を結合します。
オプティマイザーは、これらの各結合戦略を検討し、最低コストを約束するものを使用します。この決定の基礎となる最も重要な要素は、結合の両側からの推定行数です。その結果、誤ったオプティマイザーの選択は通常、行カウントの誤推定によって引き起こされます。