【そーとまーじけつごう】
ソートマージ結合 とは?
公開:
💡 並んだ2つの名簿を先頭から突き合わせる
結合キーの順に並んだ2つの入力を、位置を進めながら照合する結合方式。入力が未整列なら並べ替えの費用も必要になる。
📌 このページのポイント
- 典型的な等価結合ではキーの小さい側を進め、一致する行を結ぶ
- 整列済みの入力を使う。適切な索引順を利用できれば、明示的なソートを省ける場合がある
- 同じキーが複数行あるときは、一致グループの組み合わせを出力する
- 結合の走査だけでなく、ソートや結果件数も含めて性能を判断する
名簿を順番に見るような結合があるの?
あるよ。結合キーで整列した2つの入力を突き合わせるソートマージ結合だよ。ここでは、キーが等しい行を結ぶ内部結合を例にしよう。
順番に見るだけで、見落とさないの?
左が1・2・4、右が2・3・4なら、まず小さい左の1を進める。2で一致し、そのあと右の3を進めて4で一致する。どちらも整列済みなので、小さい値を進めても後からその値と一致する相手を飛ばさずに済むんだ。
同じ番号が何回も出てきたら?
一致するグループをまとめて扱うよ。左にキー2が2行、右にキー2が3行あり、条件がそのキーの一致だけなら、結果は6行になる。各行を1回見るだけで必ず終わる、とは説明できないんだ。
もともと並んでいなかったらどうするの?
ソートしてから結合するよ。その並べ替えには時間やメモリがかかり、入力が大きければ一時ファイルも使う。適切な索引が必要な順序を提供すれば、ソートを省ける場合もあるんだ。
いつハッシュ結合よりよいの?
すでに整列した入力を利用できるか、必要なメモリはどのくらいか、結果が何行になるかなどで変わるよ。結合部分の動きだけで優劣を決めず、入力を準備する費用も含めて実行計画を比べよう。
まとめ:ざっくりこれだけ覚えればOK!
「ソートマージ結合」は「並んだ2つの名簿を先頭から突き合わせる」と押さえておこう!
📖 おまけ:英語の意味
「sort-merge join」 = 整列して突き合わせる結合
💬 sort-merge joinは「整列して突き合わせる結合」という意味の表現だよ。