사용자 도구

사이트 도구


study:oracle:datadb:3week_1:02

문서의 이전 판입니다!


3.2.2. 데이터 연결을 위한 실행계획

  • 3.2.2.1. 내포 조인(Nested loops Join)
    1. 가장 고전적 형태의 조인방식이나 현실적으로 가장 많이 적용
    2. SINGLE BLOCK I/O
    3. 전처리 집합의 처리범위가 전체 일량을 좌우
    4. 다량의 랜덤 액세스 발생
    5. 따라서 소량의 액세스는 유용, 다량의 액세스는 큰 부하 발생
    6. NESTED LOOPS JOIN = 내포조인 = 중첩루프조인
    7. 진보된 내포조인(Advanced Nested Loop Join)
      1. 클러스터링 팩터가 좋다면, 많은 부분을 한번의 블록 액세스에서 연결가능
      2. 물리적, 논리적 블록 액세스 량이 감소 → 효율성 증대
      3. DBMS 또는 버전별로 차등 지원
  • 3.2.2.2. 정렬 병합 조인(Sort Merge Join)
    1. NESTED LOOPS JOIN의 문제점을 해결하기 위한 방안
      1. NESTED LOOPS JOIN의 문제점
      2. 조인 대상 범위가 넓을 경우 랜덤 액세스 발생
      3. 연결고리 이상으로 인한 다량의 액세스 발생
    2. SORT MERGE JOIN의 특징
      1. 랜덤액세스를 하지 않고 스캔으로 수행
      2. 최소한 두 개의 집합의 연결 고리는 필요
      3. 정렬을 대신 할수 있는 인덱스가 존재할 경우 부하 감소
      4. 연결고리에 인덱스 유무가 문제되지 않음
      5. SORT 부하 발생
        1. SORT AREA SIZE에 따른 효율성 차이 발생
      6. 해쉬조인에 비해
        1. 이미 정렬된 집합이 존재
        2. 인덱스를 활용한 정렬 대체가 가능할 경우 높은 효율성 보장 가능
      7. Nested Loop 조인에 비해
        1. =(EQUAL)이 아닌 (LIKE, BETWEEN, <. ⇐, >, >=)일 경우 유리할 수 있음
        2. 선행 집합 개념이 없음으로 선행처리 개념이 불필요
        3. 각 집합이 독립적인 처리 수행
  • 3.2.2.3. 해쉬 조인(Hash Join)
    1. 해쉬 함수 기법을 적용하여 조인 수행
    2. 조인 기법의 진화
      1. NESTED LOOPS JOIN : 랜덤 액세스 부하 발생
      2. SORT MERGE JOIN : 데이터량의 증가에 따른 정렬 부하 발생
      3. HASH JOIN : 랜덤 액세스와 정렬의 부하 감소
    3. 해쉬 함수의 특징
      1. 대량 범위에 대한 조인에 유리
      2. 연결 대상을 특정 지역(PARTITION) 구분
      3. PARTIION : 동일 해쉬 값을 보유한 데이터들을 모아둔 공간
      4. PARITION PAIR : 조인 대상에 대한 연결
      5. IN MEMORY HASH가 가능한 경우 빠른 수행속도 보장
        1. (한쪽 집합이 해쉬영역보다 작을 경우)
      6. 연산자의 제약 : ‘=‘(EQUAL) 조인만 가능
  • 3.2.2.4. 세미 조인(Semi Join)
    1. 세미조인이란?
      1. 서브쿼리가 다양한 연산자에 의해 메인 쿼리와 연결되는 경우(廣義의 의미)
    2. 조인과 서브쿼리의 비교
      1. 조인 : 조인되는 집합간 수행 순서에 관계없이 논리적으로는 수평적 관계
      2. 서브쿼리 : 메인쿼리의 집합의 변형이 없는 수직적(종속적)관계
    3. 메인쿼리와 서브쿼리간의 관계 차수에 따른 실행계획
      1. 메인쿼리 : 서브쿼리 = M : 1의 관계?
      2. 옵티마이져는 조인과 동일한 실행계획 수립
      3. 메인쿼리 : 서브쿼리 = 1 : M의 관계?
        1. 옵티마이져는 서브쿼리를 1의 집합으로 만들기 위한 중간 처리 수행
        2. 제공자 역할의 서브쿼리일 경우 SORT(UNIQUE) 처리
        3. 확인자 역할의 서브쿼리일 경우 FILTER 형 처리
    4. 힌트의 사용
      1. ORACLE 10G 이전
        1. MERGE_SJ, MERGE_AJ, HASH_SJ, HASH_AJ을 사용
      2. ORACLE 10G 이후
        1. 서브쿼리에 USE_HASH, USE_MERGE
  • 3.2.2.5. 카티젼 조인(Cartesian Join)
  • 3.2.2.6. 아우터 조인(Outer Join)
  • 3.2.2.7. 인덱스 조인
study/oracle/datadb/3week_1/02.1274234742.txt.gz · 마지막으로 수정됨: 2010/05/19 11:05 저자 upju