Join - Evaluating Relational Operation - Database Management Systems

Database Management Systemsの14章。

マインドマップから再構成したまとめ

Nested Loop Join

  • simple, but slow
  • I/O 多すぎる

Block Nested Loop Join

  • 前提:B バッファページ利用可能
  • R を B に読み込み、S の tuple と比較
  • R を読み込むのではなく B にメモリハッシュを構築して比較する方法もある

Index Nested Loop Join

  • S に使える Index がある
  • tuple r が s in S と join されるかを index を利用して確認する
  • コスト
    • R の読み込み
    • r (1 tuple)につき 1-4 I/O 。Index の種類による
    • r (1 tuple)につき 1 I/O 。データを読む。(clustered だと必要ない)


Sort Merge Join

  • R と S どちらも Sort して Merge する
  • 片方が既に Sorted の場合にチャンス
  • コスト
    • ソートは O(MlogM) + O(NlogN)
    • Merge は M + N

Hash Join

  • R と S をそれぞれ h で別々に partitioning
  • partitioning Ri に対して h2 でオンメモりハッシュ構築
  • Si の tuple を h2 して比較
  • コスト
    • R, S Scan and Write
    • Partition scan once
  • もっとメモリがあれば
    • オンメモりハッシュを直接作る
    • そうすれば partition の write が節約できる

所感

  • 状況による Join 方法の選択の部分が感覚として理解できていない。それはまた今度かな。