[ 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 */
방법
① 선행 테이블에서 조건을 만족하는 행을 찾는다.
② 선행 테이블의 조인키를 사용하여 만족하는 모든 행에 대해 해쉬 테이블을 생성한다.
③ 후행 테이블에서 조건을 만족하는 행을 찾는다.
④ 후행 테이블에서 해시함수를 사용하여 해시테이블의 주소를 계산하고 조인 할 데이터를 찾는다.
⑤ 조인에 성공하면 추출버퍼에 넣는다.
③~⑤ 후행 테이블 만족하는 행에 대해 반복
'[자격증] SQLD(SQL개발자) > ↘ SQL 기본 및 활용' 카테고리의 다른 글
[ SQLD ] SQL 최적화 기본 원리 - 2. 인덱스 기본 (0) | 2020.05.30 |
---|---|
[ SQLD ] SQL 최적화 기본 원리 - 1. 옵티마이저와 실행계획 (0) | 2020.05.30 |
[ SQLD ] SQL 활용 - 7. DCL (Data Control Language) (데이터 제어어) (0) | 2020.05.30 |
[ SQLD ] SQL 활용 - 6. 윈도우 함수 (0) | 2020.05.30 |
[ SQLD ] SQL 활용 - 5. 그룹 함수 (0) | 2020.05.30 |
댓글