MergeJoin

MergeJoin

テーブル結合戦略の一つ。2つのテーブルを結合キーでソートし、両者のキーが等しい間行結合が行われるような手法。

PostgreSQLはソートに外部ソートを使っており、搭載メモリを越えるソートをすることが可能なため、巨大テーブル同士の結合を試みる際によく使われる傾向がある。特に、どちらのテーブルにも結合キーにインデックスが張られておらず、またwork_memが十分大きく設定されていない場合に消去法的にMergeJoinになることが多い。ちなみに前者ではNestLoopが好まれ、後者ではHashJoinが好まれるようだ。

さらに、どちらかのテーブルがSELECT句になっていてそのサブクエリのキーカラムがORDER BY句によってソートされている時、MergeJoinはその結果をそのまま(外部ソートせずに)使えるため、選ばれる傾向がある。

SET enable_mergejoin TO off;

によってMergeJoinを使わないように指示することが可能。

8.3で外部ソートを行うTuplesortの改良が行われ、パフォーマンスが向上したと言われている。

マージジョイン。マージ結合。ソースコード内やMLではMJと略されることもある。