study:oracle:datadb:3week_1:02
문서의 이전 판입니다!
3.2.2. 데이터 연결을 위한 실행계획
- 3.2.2.1. 내포 조인(Nested loops Join)
- 가장 고전적 형태의 조인방식이나 현실적으로 가장 많이 적용
- SINGLE BLOCK I/O
- 전처리 집합의 처리범위가 전체 일량을 좌우
- 다량의 랜덤 액세스 발생
- 따라서 소량의 액세스는 유용, 다량의 액세스는 큰 부하 발생
- NESTED LOOPS JOIN = 내포조인 = 중첩루프조인
- 진보된 내포조인(Advanced Nested Loop Join)
- 클러스터링 팩터가 좋다면, 많은 부분을 한번의 블록 액세스에서 연결가능
- 물리적, 논리적 블록 액세스 량이 감소 → 효율성 증대
- DBMS 또는 버전별로 차등 지원
- 3.2.2.2. 정렬 병합 조인(Sort Merge Join)
- NESTED LOOPS JOIN의 문제점을 해결하기 위한 방안
- NESTED LOOPS JOIN의 문제점
- 조인 대상 범위가 넓을 경우 랜덤 액세스 발생
- 연결고리 이상으로 인한 다량의 액세스 발생
- SORT MERGE JOIN의 특징
- 랜덤액세스를 하지 않고 스캔으로 수행
- 최소한 두 개의 집합의 연결 고리는 필요
- 정렬을 대신 할수 있는 인덱스가 존재할 경우 부하 감소
- 연결고리에 인덱스 유무가 문제되지 않음
- SORT 부하 발생
- SORT AREA SIZE에 따른 효율성 차이 발생
- 해쉬조인에 비해
- 이미 정렬된 집합이 존재
- 인덱스를 활용한 정렬 대체가 가능할 경우 높은 효율성 보장 가능
- Nested Loop 조인에 비해
- =(EQUAL)이 아닌 (LIKE, BETWEEN, <. ⇐, >, >
일 경우 유리할 수 있음
- 선행 집합 개념이 없음으로 선행처리 개념이 불필요
- 각 집합이 독립적인 처리 수행
- 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)
- 세미조인이란?
- 서브쿼리가 다양한 연산자에 의해 메인 쿼리와 연결되는 경우(廣義의 의미)
- 조인과 서브쿼리의 비교
- 조인 : 조인되는 집합간 수행 순서에 관계없이 논리적으로는 수평적 관계
- 서브쿼리 : 메인쿼리의 집합의 변형이 없는 수직적(종속적)관계
- 메인쿼리와 서브쿼리간의 관계 차수에 따른 실행계획
- 메인쿼리 : 서브쿼리 = 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.6. 아우터 조인(Outer Join)
- 3.2.2.7. 인덱스 조인
study/oracle/datadb/3week_1/02.1274234742.txt.gz · 마지막으로 수정됨: 저자 upju
