[web] Database Join


1.Joinは


重複データを回避するために、RDBはデータを複数のテーブルに分けて記憶する.これらの分離されたデータから所望の結果を得るためには、複数のテーブルを組み合わせる必要がある.
[1] Cross Join (Cartisian Product)
前の行と後の行の表のすべての行を組み合わせて、特別な条件は必要ありません.
SELECT *
FROM STUDENT, PROFESSOR
[2] Inner Join
前のテーブルと後のテーブルを組み合わせて、結合条件を満たす文のレコードのみを返します.すなわち、対等比較や範囲演算などの条件文を交差結合に追加します.
SELECT *
FROM STUDENT, PROFESSOR
WHERE STUDENT.SUBJECT = PROFESSOR.SUBJECT
[3] Natural Join
前のテーブルと後のテーブルを組み合わせて、同じ名前のカラムに同じ値のみを返します.つまり、Inner Join条件文に同じカラム名条件を追加します.
# 만약 STUDENT, PROFESSOR의 공통 컬럼명이 SUBJECT일 경우 위에 예시와 동일합니다.
SELECT *
FROM STUDENT NATRUAL JOIN PROFESSOR
[4] Outer Join
内部結合は、共通のカラム名に基づいて結果セットを生成しますが、外部結合には条件文を満たさない行も表示されます.

2.Join動作原理


[1] Nested Loop Join


前のテーブルと後のテーブルのすべてのレコードを組み合わせます.これはネストされたループに似ています.前置表Loop*後行表Loop
  • の前置きテーブルと後行テーブルのブロックをメモリにインポートします.メモリ容量が限られています.ブロックを使用すると、次のブロックとSWAPが使用されます.
  • 前置表のROW数に従って[3]回の操作を行う.
  • 後行テーブル全体を巡回し、前のテーブルの条件部分を比較します.
  • 後ろのテーブルにはJOIN Keyナビゲーションプロセスがよく現れ、インデックス操作がなければ非常に効率的ではありません.また、重複する前置テーブルROW数が多いほど、前置テーブルのROW数が少ないほど効率が高くなる.

    [2] Sorted Merge Join


    2つのテーブルを
  • 結合キーに従ってソートし、結果を集計してデータを検索します.
  • 大規模なテーブルに後続のテーブルのインデックスがない場合、NL Joinは時間がかかります.
  • はもちろん、多くの結合動作において、CPU動作を主とするハッシュ結合が性能的に有利である可能性がある.しかし,Hash結合とは異なり,レンジ結合も性能的に優れている.
  • [3] Hash Join


    ハッシュ関数の結合を使用すると、ピアツーピア結合で非常にパフォーマンスが向上します.ただし、マージ操作によりパフォーマンスが低下します.
    シードマージ(Seed Merge)は、他のソート操作があるため、範囲結合に理想的です.インデックスのないテーブルでインデックスが発生した場合は「ハッシュ結合」を選択しますが、インデックスがあってもハッシュ結合が頻繁に実行される場合があります.そのため、より大きなデータを処理する上で優位性があります.