본문 바로가기
[자격증] SQLD(SQL개발자)/↘ SQL 기본 및 활용

[ SQLD ] SQL 최적화 기본 원리 - 3. 조인 수행 원리

by 승큐리티 2020. 5. 30.


[ SQLD ] 

3. SQL 최적화 기본 원리

3-3. 조인 수행 원리



1. NL Join
하나의 테이블을 선행테이블로 정하고 조건을 만족하는 행을 찾은 후 나머지 후행 테이블에서 데이터를 찾는다.
선행테이블을 외부테이블이라 하고 후행테이블을 내부테이블이라고 한다.
힌트절 :  /*+ ORDERED use_nl */

방법
① 선행 테이블에서 조건을 만족하는 행을 찾는다.
② 선행 테이블에서 후행 테이블에 조인 가능한지 인덱스를 찾는다. -> RANDOM ACCES 발생
③ 후행 테이블에서 조건을 만족하는 행을 찾는다.
④ 만족하는 행을 추출버퍼에 넣는다.


2. Sort Merge Join
- 두 테이블을 정렬하고 병합하는 조인
- 넓은 범위의 데이터를 처리할 때 이용되던 조인 기법
- 정렬을 이용하기 때문에 데이터가 많으면 성능이 저하
- 정렬할 데이터가 많을땐 메모리 대신 임시 영역(디스크)을 사용 -> 성능 저하
힌트절 :  /*+ ORDERED use_merge */

방법
① 선행 테이블에서 조건을 만족하는 행을 찾는다.
② 선행 테이블을 정렬한다.
③ 후행 테이블에서 조건을 만족하는 행을 찾는다.
④ 후행 테이블을 정렬한다.
⑤ 정렬된 두 테이블 병합 실시하고 성공 시 추출버퍼에 넣는다.


3. Hash Join
- 해시 기법을 사용하여 테이블의 칼럼을 기준으로 조인을 수행
- 해시테이블을 생성하고 동일한 해시 값을 갖는 것 끼리 실제 값이 같은지 비교하며 조인을 수행
- 결과 행의 수가 적은 테이블을 선행 테이블로 사용
- NL 조인의 랜덤 액세스 문제와 정렬-병합 조인의 정렬 과부화 해결을 위해 등장
- Equal 조인만 사용 가능
- 인덱스가 없어도 사용가능
힌트절 :  /*+ ORDERED use_hash */

방법
① 선행 테이블에서 조건을 만족하는 행을 찾는다.
② 선행 테이블의 조인키를 사용하여 만족하는 모든 행에 대해 해쉬 테이블을 생성한다.
③ 후행 테이블에서 조건을 만족하는 행을 찾는다.
④ 후행 테이블에서 해시함수를 사용하여 해시테이블의 주소를 계산하고 조인 할 데이터를 찾는다.
⑤ 조인에 성공하면 추출버퍼에 넣는다.
③~⑤ 후행 테이블 만족하는 행에 대해 반복


 

댓글