NESTED LOOP JOIN의 개념
- 옵티마이저가 Driving Table을 결정 (Outer Table)
- Driving Table 이 아닌 테이블은 Driven Table로 지정 (Inner Table)
- Driving Table의 각 row에 대해 이들이 추출될 때마다 Driven Table의 연관된 모든 row를 조인에 의해 액세스
- 튜닝포인트
- 테이블 간 조인 회수를 최소화 할 수 있도록 Driving Table을 결정
- Driven Table의 연결고리 컬럼에 대한 인덱스 구성
- Driving Table은 실행 계획에서 Driven Table 보다 위에 표시됨
NESTED LOOP JOIN의 절차
더보기
NESTED LOOP JOIN의 예
NESTED LOOP JOIN의 장단점
- NESTED LOOP 조인은 인덱스에 의한 랜덤 액세스에 기반하고 있기 때문에 대량의 데이터 처리 시 적합하지 않음
- Driving Table 로는 테이블의 데이터가 적은 마스터 테이블이거나, where 조건으로 적절하게 row를 제어할 수 있는 것이어야 함
- Driven Table 에는 조인을 위한 적절한 인덱스가 생성되어 있어야 함
→ 연결 고리가 되는 칼럼은 사원번호, 주민번호와 같이 Unique 한 속성을 가진 칼럼 인덱스를 이용하거나
분포도가 좋은 칼럼에 대한 인덱스를 이용할 수록 수행 속도는 좋아짐
NESTED LOOP JOIN 관련 파라미터
Drivig Table의 원리
더보기
DRIVING TABLE의 예
조인 순서 제어 방법
- NESTED LOOP JOIN과 HASH JOIN은 조인 순서 제어가 매우 중요함
- 조인 순서 제어 방법
- 조인 순서 제어를 위한 힌트 사용
- /* + ORDERD */
- FROM 절에 기술한 테이블 순서대로 제어하기 위해 사용
- /* + LEADING (테이블명) */
- 힌트 내에 제시한 테이블이 드라이빙으로 채택됨
- 단, ORDERED 힌트와 같이 사용할 경우 LEADING 힌트는 무시됨
- 조인 순서 제어를 위한 힌트 사용
- 조인순서 제어를 위해 뷰의 절차성을 활용하는 방법
- 인라인 뷰 사용
- 외부적 변형을 사용하는 방법
- FROM 절의 테이블 순서를 변경해서 제어하는 방법은 CBO 하에서는 의미가 없음
NL JOIN의 연결 고리 인덱스
SORT MERGE JOIN의 개념
- SORT MERGE 조인의 사용
- 연결 고리에 이상이 있는 경우
- 조인을 위한 연결 고리 컬럼에 대한 인덱스가 없는 경우
- 대용량의 자료를 조인 처리함으로써 인덱스 사용에 의한 랜덤 액세스의 오버헤드가 많은 경우
- 연결 고리에 이상이 있는 경우
- SORT MERGE 조인에서는 Driving Table 이 의미 없음
- 즉, 각 테이블에 대한 처리를 독립적으로 행함
- 읽혀진 각 테이블의 데이터를 조인을 위한 연결고리 컬럼에 대하여 정렬
- 정렬 후에 조인 작업이 수행 (MERGE)
SORT MERGE JOIN 절차
더보기
SORT MERGE JOIN 의 예
SORT MERGE JOIN의 장단점
- SORT MERGE 조인은 조인 결합 조건으로 사용되는 연결고리 컬럼에 인덱스가 생성되어 있지 않은 경우에 빠른 조인을 위하여 사용
- 조인 하고자 하는 각 테이블에 대해서 독립적으로 데이터를 읽어 들일 때, 이를 얼마나 빠르게 할 것 인지가 중요
- 각 테이블로부터 읽혀진 데이터를 연결고리가 되는 컬럼에 대하여 정렬을 수행할 때 이를 얼마나 빠르게 할 것인지가 중요
- Parallel Processing 을 함께 활용함으로 테이블에 대한 Full Table Scan의 속도를 향상시키는 것도 가능
SORT MERGE JOIN 파라미터
HASH JOIN의 개념
- NESTED LOOP 조인과 SORT MERGE 조인에 의한 성능을 보다 개선하기 위해 사용
→ NESTED LOOP 조인은 인덱스 사용에 의한 랜덤 액세스의 오버헤드가 있으며,
SORT MERGE 조인은 Sory operation 으로 인한 오버헤드가 있음 - SORT MERGE 조인과 비교해 보면, 각 테이블에 대한 처리를 독립적으로 하는 것은 같지만 HASH JOIN 에서는 Driving Table이 있음 이는 HAST_AREA_SIZE 에 의해 결정되며 주로 작은 테이블이 DRIVING TABLE로 사용됨
- 읽혀진 각 테이블의 데이터를 조인하기 위해서 Hash Algorithm 을 사용
HASH JOIN의 절차
더보기
HASH JOIN의 예
HASH JOIN의 장단점
- CBO 모드에서 옵티마이저가 판단해서 적용할 수 있으며, 테이블의 통계 정보가 있어야 함
- 통계 정보가 없는 경우에도 힌트를 사용하면 HASH JOIN을 사용하도록 유도할 수 있음
- HASH 조인은 Equi 조인에서만 가능
- Driving Table의 row를 조인하기 위한 연결고리에 대한 인덱스를 꼭 필요로 하지 않음
- 방대한 처리 결과가 요구되는 OLTP 또는 DW 업무에서 사용됨
- CPU와 메모리 등 많은 H/W 자원이 필요함
SET OPERATOR
더보기
SET 연산자의 예
SET 연산자의 장단점
- 각 질의문 결과에 대한 수학적인 개념의 집합 연산 수행
- UNION ALL 조회되는 Select List 의 칼럼 개수와 자료 형만 동일하다면 N 개의 질의문의 결과를 결합할 수 있는 수단
- 교집합 (즉, 데이터 중복) 이 없는 경우, UNION ALL 사용
- FIRST_ROWS 힌트 무시
- 양방향 Outer 조인은 UNION 또는 UNION ALL 사용
SUBQUERY
CORRELATED SUBQUERY
TOP-N QUERY
- TOP-N QUERY를 이용한 Top-N
- Inline view 내에서의 order by 사용
- Inline view로 부터 데이터 추출 시 ROWNUM 사용으로 데이터 row 수를 제어
- ROWNUM 은 출력되는 rows 에 부여되는 순번임
- Correlated Subquery 를 이용한 Top-N
- Subquery 내부에서 Count(*)를 이용
- Analytic Function 을 이용한 Top-N
- RANS() OVER(), DENSE_RANK(), ROW_NUMBER()
'SQL > SQL 실무 활용' 카테고리의 다른 글
Table 변경/삭제 (0) | 2024.01.04 |
---|---|
Data 조작 (0) | 2024.01.04 |
튜닝 활용 (0) | 2024.01.03 |