조인(Join) 연산

반응형
  • 정의
    • 조인은 하나의 처리 문장을 이용해 데이터베이스의 테이블 2개를 연결하여 새로운 테이블을 생성하는 기능
    • 데이터베이스의 성능에 영향을 미치게 되어 추후 반정규화 또는 튜닝의 대상이 되기도 함
         
  • 분류
    • 동등 조인(Equi-Join)
      조인 조건에 동등 연산자만을 사용한 조인
    • 비동등 조인(Nonequi-Join)
      조인 조건에 비동등 연산자만을 사용한 조인
    • 카테시안 프로덕트(Cartesian Product)
      • 조인 조건이 없는 조인
      • 각 테이블의 튜플 건수의 곱만큼 결과가 생성됨
      • 상호 조인(Cross Join)이라고도 하며, 실제로는 거의 사용하지 않음
    • 내부 조인(Inner Join)
      • 조인 조건을 만족하는 튜플들만 결과 테이블에 포함하는 조인
      • 대부분의 조인이 이에 해당하며, 어떤 조인인지 지정하지 않으면 내부 조인으로 인식
    • 외부 조인(Outer Join)
      • 조인 조건을 만족하지 않는 튜플까지 결과 테이블에 포함하는 조인
      • 종류로는 왼쪽 외부 조인(Left Outer Join)와 오른쪽 외부 조인(Right Outer Join), 완전 외부 조인(Full Outer Join)이 있음
    • 자신 조인(Self Join)
      • 기준 테이블이 자신을 참조 테이블로 하여 수행하는 조인
      • 같은 테이블의 서로 관련이 있는 튜플들을 조합해서 추출할 필요가 있을 때 사용함
    • 자연 조인(Natural Join)
      동등 조인 결과에서 중복되는 속성을 제거한 조인
       
  • 조인 처리 방법
    • 중첩-반복(Nested-Loop) 조인
      • 한 테이블(내부 테이블)에서 검색 조건을 만족하는 튜플을 하나식 접근하면서, 그 추출된 값으로 조인 조건에 따라 다른 테이블(외부 테이블)과 조인하는 방식
      • 먼저 접근하는 테이블의 처리 범위에 있는 튜플들을 순차적으로 처리하며, 이 처리 범위에 의해 처리량이 결정
      • 인덱스가 필요 없고, 모든 종류의 조인 조건에 대해 적용 가능
      • 부분 범위 처리를 하는 경우에 유리한, 다른 방법에 비해 비용이 가장 큼
    • 블록 중첩-반복(Block Nested-Loop) 조인
      • 한 테이블의 모든 블록이 다른 테이블의 모든 블록과 쌍을 이루도록 중첩 반복 조인을 변형한 방식
      • 각 블록의 쌍 내에서 하나의 블록 내의 모든 튜플은 또 다른 블록 내의 모든 튜플과 쌍을 이루어 조인을 수행
      • 블록 단위로 테이블을 처리함으로써, 블록 접근 횟수가 감소
    • 색인된 중첩-반복(Indexed Nested-Loop) 조인
      • 종첩-반복 조인 시 다음 조건을 만족하는 경우 인덱스를 이용해 파일 스캔을 대체하는 방식
        • 동등 조인이거나 자연 조인일 경우
        • 내부 테이블의 조인 속성에 대해 인덱스가 있는 경우
      • 내부 테이블과 외부 테이블 모두에 대해 조인 속성에 대한 인덱스가 존재하는 경우에는 적은 수의 튜플을 갖는 테이블을 외부 테이블로 사용하는 것이 효율적임
      • 조인 연산을 위해 인덱스를 임시로 생성해서 사용하는 것이 가능
    • 정렬-병합(Sort-Merge) 조인
      • 양쪽 테이블의 처리 범위를 각자 정렬한 후 정렬한 결과를 차례로 스캔 하면서 조인 조건에 따라 병합하는 방식
      • 동등 조인과 자연 조인인 경우에만 적용 가능
      • 정렬을 해야 하므로 처리 비용이 일반적으로 비싸며, 전체 범위 처리를 하는 경우에 유리
      • 조인 속성에 대해서, 한 테이블은 정렬되어 있고 다른 테이블은 B+-tree를 가지고 있는 경우에, 혼합 정렬-병합(Hybrid Sort-Merge) 조인을 수행
    • 해시(Hash) 조인
      • 먼저 접근하는 테이블을 전체 테이블 스캔을 통해 접근하여 해시 테이블을 생성한 후 , 다른 테이블의 처리 범위에 대해 해시 함수를 적용하여 해시 테이블과 조인
      • 주로 크기기 작은 테이블을 먼저 접근하는데, 대량의 데이터를 처리할 때 좋으며, 작은 테이블과 큰 테이블의 조인 시에 유리
      • 동등 조인과 자연 조인인 경우에만 적용 가능하며, 먼저 접근하는 테이블에서는 인덱스를 필요로 하지 않음
      • 메모리 크기가 상대적으로 크고, build input이 메모리 보다 클 경우에는 혼합 해시 (Hybrid Hash) 조인을 사용
반응형

'밥벌이 > 데이터베이스' 카테고리의 다른 글

셀렉션(Selection) 연산  (0) 2011.01.31
정렬(Sorting)  (0) 2011.01.31
기타 연산  (0) 2011.01.31
관계 대수식 평가(Evaluation)  (0) 2011.01.31
질의 최적화  (0) 2011.01.31