중첩 루프 조인
● 먼저 수행되는 집합(선행 테이블)의 처리 범위가 전체 일량을 좌우함
● 먼저 수행되는 집합이 상수로 바뀌어 후행 테이블에 조인절 조건으로 공급됨
● 후행 테이블은 계속 루프를 돌면서 선행 테이블의 상수 공급이 종료될 때까지 조인을 시도함
● 조인 되는 후행 테이블의 조인 컬럼에 인덱스가 존재해야 함
● 인덱스가 없으면 후행 테이블을 반복적으로 FULL TABLE SCAN 하므로 비효율적
● 2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 ROW를 결합해 원하는 결과를 조합
● 조인해야 할 데이터가 많지 않은 경우에 유용하게 사용
● 드라이빙 테이블로 한 테이블을 선정하고 이 테이블로부터 WHERE 절에 정의된 검색 조건을 만족하는 데이터들을 필터링 한 후 , 이 값을 가지고 조인 대상 테이블을 반복적으로 검색해 결과값을 도출함.
* 드라이빙 테이블이란?
JOIN을 할 때 먼저 액세스 되는 테이블 (+ 나중에 액세스되는 테이블은 DRIVEN TABLE)

중첩 루프 조인 더 잘 사용하는 방법
● DRIVING TABLE 선정 시 WHERE 절로 최대한의 데이터를 필터링할 수 있는 테이블이나 데이터의 양이 적은 테이블로 선정하는 것이 좋음!
SORT MERGE
: 두 테이블의 조인 컬럼으로 각각 정렬한 다음, 정렬 값을 서로 비교하면서 조인하는 방식
중첩 루프 조인에서 조인 횟수에 의한 랜덤 액세스가 부담되는 경우에 사용
: 정렬 작업은 PGA 메모리를 사용하므로 조인 대상 건수가 많을수록 정렬을 위한 부담이 증가
메모리 SORT_AREA_SIZE로 최적화
: 조회의 범위가 많을 때 주로 사용
● 연결 고리에 인덱스가 전혀 없는 경우
● 대용량의 자료를 조인할 때
● 조인 조건으로 <,>,<=,>=와 같은 범위 비교 연산자 사용된 경우
● 인덱스 사용에 따른 랜덤 액세스의 오버헤드가 많은 경우

HASH JOIN
● Driving 테이블로 하나를 선택
Hashing을 통해 해시값을 만들어 메모리 적재
● 다음으로 조인해야 할 테이블로부터 데이터를 읽어서
Hashing을 통해 해시값을 만듬
● 비용 기반 옵티마이저를 사용할 때만 사용될 수 있으며, '=' 비교를 통한 조인에서만 사용 가능
메모리 HASH_AREA_SIZE로 최적화(SORT_AREA_SIZE 2배가 기본값)
Hash JOIN 사용기준
수행 빈도가 낮고
쿼리 수행 시간이 오래 걸리는
대량 데이터 조인할 때(효율적이나 cpu를 많이 잡아먹기 때문)

'SQL 문 STUDY' 카테고리의 다른 글
| SQL - 서브쿼리(필터/JOIN) (0) | 2023.01.08 |
|---|---|
| SQL문- 실행계획/ INDEX(UNIQUE, FULL, RANGE, MIN/MAX, 컬럼 가공, FAST) (0) | 2023.01.08 |
| SQL문 - 데이터 딕셔너리 (0) | 2023.01.07 |
| SQL문 - DCL(GRANT/REVOKE/COMMIT/ROLLBACK) (0) | 2023.01.07 |
| SQL문 - ROWID / ROWNUM (0) | 2023.01.07 |