Loading article…
ネストループ結合は、 2つのネストされたループを使用して2つのリレーションを結合する単純なアルゴリズムです。[1]結合操作はデータベース管理にとって重要です。
アルゴリズム
2 つの関係と は次のように結合されます。
アルゴリズムnested_loop_joinは、
R内の各タプルrに対して、S内の各タプルsに対して、rとs が結合条件を満たす場合はタプル < r、s >
を生成します。
このアルゴリズムには、n r *b s + b r のブロック転送と n r +b r のシークが含まれます。ここで、b rと b s はそれぞれリレーション R と S のブロック数であり、n r はリレーション R のタプル数です。
アルゴリズムはI/O で実行されます。ここで、 はそれぞれとに含まれるタプルの数であり、任意の数の関係を結合するように簡単に一般化できます...
ブロックネストループ結合アルゴリズム[2]は、単純なネストループアルゴリズムを一般化したものであって、追加のメモリを利用してリレーションのスキャン回数を減らします。このアルゴリズムは、リレーション R の大きなチャンクをメインメモリにロードします。各チャンクについて、S をスキャンし、現在メモリ内にあるすべてのタプルペアの結合条件を評価します。これにより、S のスキャン回数がチャンクごとに 1 回に減ります。
インデックス結合のバリエーション
内部リレーションに結合で使用される属性のインデックスがある場合は、単純なネスト ループ結合をインデックス結合に置き換えることができます。
アルゴリズムindex_joinは、
R内の各タプルrに対して、インデックス検索でS内の各タプルsに対してタプル< r、s >
を生成する。
このバリエーションの時間計算量は、
参照
参考文献
- ^ 「ネストされたループ結合を理解する」 2012 年 10 月 4 日。
- ^ http://www.databaselecture.com/slides/9_Operator_Implementations.pdf [ベア URL PDF ]
