사용자 도구

사이트 도구


study:oracle:datadb:3week_1:02

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
study:oracle:datadb:3week_1:02 [2010/05/19 11:01]
upju 새로 만듦
study:oracle:datadb:3week_1:02 [2010/05/19 13:55] (현재)
gwgwg
줄 34: 줄 34:
  
   * 3.2.2.3. 해쉬 조인(Hash Join)    * 3.2.2.3. 해쉬 조인(Hash Join) 
 +    - 해쉬 함수 기법을 적용하여 조인 수행
 +    - 조인 기법의 진화
 +      - NESTED LOOPS JOIN : 랜덤 액세스 부하 발생
 +      - SORT MERGE JOIN : 데이터량의 증가에 따른 정렬 부하 발생
 +      - HASH JOIN : 랜덤 액세스와 정렬의 부하 감소
 +    - 해쉬 함수의 특징
 +      - 대량 범위에 대한 조인에 유리
 +      - 연결 대상을 특정 지역(PARTITION) 구분
 +      - PARTIION : 동일 해쉬 값을 보유한 데이터들을 모아둔 공간
 +      - PARITION PAIR : 조인 대상에 대한 연결
 +      - IN MEMORY HASH가 가능한 경우 빠른 수행속도 보장
 +         - (한쪽 집합이 해쉬영역보다 작을 경우)
 +      - 연산자의 제약 : ‘=‘(EQUAL) 조인만 가능
  
   * 3.2.2.4. 세미 조인(Semi Join)    * 3.2.2.4. 세미 조인(Semi Join) 
 +    - 세미조인이란? 
 +      - 서브쿼리가 다양한 연산자에 의해 메인 쿼리와 연결되는 경우(廣義의 의미)
 +    - 조인과 서브쿼리의 비교
 +      - 조인 : 조인되는 집합간 수행 순서에 관계없이 논리적으로는 수평적 관계
 +      - 서브쿼리 : 메인쿼리의 집합의 변형이 없는 수직적(종속적)관계
 +    - 메인쿼리와 서브쿼리간의 관계 차수에 따른 실행계획
 +      - 메인쿼리 : 서브쿼리 = M : 1의 관계?
 +      - 옵티마이져는 조인과 동일한 실행계획 수립
 +      - 메인쿼리 : 서브쿼리 = 1 : M의 관계?
 +        - 옵티마이져는 서브쿼리를 1의 집합으로 만들기 위한 중간 처리 수행
 +        - 제공자 역할의 서브쿼리일 경우 SORT(UNIQUE) 처리
 +        - 확인자 역할의 서브쿼리일 경우 FILTER 형 처리
 +    - 힌트의 사용
 +      - ORACLE 10G 이전
 +        - MERGE_SJ, MERGE_AJ, HASH_SJ, HASH_AJ을 사용
 +      - ORACLE 10G 이후
 +        - 서브쿼리에 USE_HASH, USE_MERGE
  
   * 3.2.2.5. 카티젼 조인(Cartesian Join)    * 3.2.2.5. 카티젼 조인(Cartesian Join) 
 +    - 조인이 되는 두 개의 집합간에 연결고리 조건이 전혀 없는 경우
 +    - M:M 조인을 의미
 +    - 실행계획의 특징
 +      - SORT MERGE JOIN만이 CARTESIAN 실행계획 명기
 +      - 타 JOIN의 경우 정상적인 조인의 실행계획으로 표기, 단 결과상 확인 가능
 +    - 카티젼 조인(CARTESIAN JOIN)의 발생 원인
 +      - 쿼리 생성자의 실수
 +      - 사용자가 특별한 목적하에 고의적인 카티젼 조인 발생
 +      - 3개 이상의 집합 조인시 조인 순서의 잘못으로 발생
  
   * 3.2.2.6. 아우터 조인(Outer Join)    * 3.2.2.6. 아우터 조인(Outer Join) 
 +    - 아우터 조인(OUTER JOIN)
 +       - 외측 루프는 언제나 보존되고, 내측 루프는 선택적인 조인
 +     - 아우터 조인(Outer Join)의 종류
 +        - NESTED LOOPS 아우터 조인
 +            - 주의사항
 +              - OUTER LOOP : 기준/보존 집합
 +              - INNER LOOP : OUTER LOOP의 결과 집합 영향을 주지 않도록 수행
 +            -  USE_NL(TABLE1, TABLE2)
 +          -  NESTED LOOPS(OUTER)
 +       - 해쉬 아우터 조인
 +           - Hash Function을 이용해서 메모리와 CPU를 많이 사용해서 일반적으로 배치작업에서 주로 사용됨
 +               - /*+ use_hash(테이블) */
 +               - 적은테이블과 큰테이블의 조인시에 유리
 +               - Equal 조인에서만 가능
 +               - Driving Table에 인덱스를 필요로 하지 않고 각 테이블을 한번만 읽음
 +               - 다른조인방법보다 CPU자원을 많이 소비하며 양쪽 테이블의 scan이 동시에 일어남
 +       - SORT MERGE 아우터 조인
 +          - 선택 조건
 +              - NESTED LOOPS 조인으로는 부담이 되는 대량의 데이터 또는 인덱스 문제가 있는 경우
 +              - 조건 연산자로 인해 HASH 조인이 불가능 할 경우
 +              - 이미 다른 처리에 의해 조인을 위한 정렬이 선행되어 있는 경우
 +        - 전체 아우터 조인
 +           - 조인에 참여하는 양 집합이 모두 기준집합이며 대응집합일 경우
 +           - 수행방식
 +              - 한 쪽을 기준으로 아우터 조인을 수행한 결과
 +              - 다른 쪽을 기준으로 부정형 조인을 할 결과
 +              - 위 두 집합을 UNION ALL 
  
   * 3.2.2.7. 인덱스 조인    * 3.2.2.7. 인덱스 조인 
 +     - 인덱스 조인
 +       - 테이블 엑세스 없이 하나 이상의 인덱스들을 결합하여 쿼리를 수행
 +     - 인덱스 조인의 특징
 +       - 사용된 모든 컬럼이 어떤 인덱스에라도 존재
 +       - 비교 연산자가 ‘=’이 아니어도 인덱스 조인에 참여 가능
 +       - 반드시 인덱스의 선두 컬럼이 아니어도 인덱스 조인에 참여 가능
 +       - 조건절을 기준으로 인덱스 조인을 결정
 +       - 인덱스 조인이 논리적으로 가능하다고 해서 항상 발생되는 것은 아님
 +       - 실행계획상에는 해쉬 조인으로 수행되는 것으로 보임
  
study/oracle/datadb/3week_1/02.1274234518.txt.gz · 마지막으로 수정됨: 2010/05/19 11:01 저자 upju