結合アルゴリズム:3方式で手数が違う

2つのテーブルを JOIN するとき、ネステッドループ・ソートマージ・ハッシュ結合は「手数(比較回数)」がまるで違います。行数を動かして勝敗を見ます。

2,000
2,000
グラフの縦軸:
ネステッドループ
ソートマージ
ハッシュ結合
いちばん手数が少ない
3方式の手数(比較・処理回数)
手数 vs 左テーブル行数 N(M は固定。縦線が現在の N)
同じ R JOIN S でも、DBMS の中では「手数(処理ステップ数)」が方式ごとに大きく違います。
ネステッドループは R の各行について S を全走査するので、ざっくり N×M。行数が増えると一気に重くなります。
ソートマージは両方を並べ替えてから一度すれ違うだけ。整列に N·logN + M·logM、マージに N+M
ハッシュ結合は片方でハッシュ表を作り(ビルド)、もう片方で引く(プローブ)ので N+M
スライダーで N と M を動かし、どのサイズ比でどの方式が勝つかを実測カウンタで確かめましょう。

いま何が起きている?

ここがポイント