본문 바로가기

카테고리 없음

NL조인

 

1. NL 조인의 기본 개념

 

 

중첩 반복문처럼 작동하는 조인 방식
- 드라이빙 테이블(Driving/Outer Table) → 먼저 액세스되는 테이블
- 드리븐 테이블(Driven/Inner Table) → 나중에 액세스되는 테이블

 

FOR EACH ROW in 드라이빙 테이블    -- 외부 루프
    FOR EACH ROW in 드리븐 테이블  -- 내부 루프
        IF 조인 조건 만족 THEN
            결과 행 추가
        END IF
    END FOR
END FOR

 

NL 조인이 효율적인 경우

 

- 드라이빙 테이블이 소량의 데이터를 반환할 때
- 조인 조건에 적절한 인덱스가 있는 경우
- OLTP(OnLine Transaction Processing) 환경
- 부분범위 처리가 가능한 경우

 

NL 조인의 특징

 

장점:
- 첫 번째 row 가져오는 응답속도 빠름
- 인덱스를 잘 활용하면 빠른 조회 가능
- 조인 대상 건수가 적을 때 유리

단점:
- 드리븐 테이블을 반복 액세스
- 대용량 데이터 처리시 성능 저하
- 부적절한 인덱스시 성능 매우 저하

 

최적화를 위한 고려사항

 

1) 드라이빙 테이블 선정
   - 조건절로 결과 건수가 줄어드는 테이블
   - 조인 후 결과 건수가 작은 테이블

2) 인덱스 구성
   드라이빙 테이블: WHERE 조건과 ORDER BY 고려
   드리븐 테이블: 조인 조건 컬럼 위주

3) 조인 조건
   - 적절한 조인 조건 필수
   - 조인 컬럼에 대한 인덱스 중요

 

실제 예시

SELECT * 
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND e.salary > 5000;

실행 과정:
1. employees 테이블에서 salary > 5000 조건으로 row 찾음
2. 찾은 각 row의 department_id로 departments 테이블 조회
3. 조인 조건 만족하는 결과 반환

 

성능 개선 방법

 

1) 적절한 인덱스 구성
   - 드라이빙 테이블: WHERE 조건 컬럼
   - 드리븐 테이블: 조인 컬럼

2) 드라이빙 테이블 선정
   - 더 적은 결과를 반환하는 테이블을 드라이빙으로

3) 힌트 사용
   - USE_NL
   - LEADING
   - NO_NLJ_BATCHING

4) 조인 컬럼 선정
   - 적절한 조인 조건 구성
   - 인덱스 활용 가능한 조건

 

주의사항

 

- 대용량 데이터 처리시 다른 조인 방식 고려
- 인덱스 구성이 부적절하면 성능 저하
- 드라이빙 테이블 선정이 중요
- 조인 조건 누락 주의

 

2. NL 조인의 효율적 사용을 위한 튜닝 전략

  1. 인덱스 활용
    • 내부 테이블의 조인 조건 열에 인덱스를 추가하는 것이 매우 중요합니다.
    • 인덱스를 사용하면 내부 테이블을 풀 스캔하지 않고 필요한 레코드만 빠르게 찾을 수 있기 때문에 성능이 크게 향상됩니다.
  2. 외부 테이블과 내부 테이블의 선택
    • 외부 테이블은 작은 테이블로, 내부 테이블은 큰 테이블로 선택하는 것이 효율적입니다.
    • 외부 테이블이 작을수록 반복 횟수가 줄어들어 성능이 개선됩니다.
  3. 필터 조건의 사전 적용
    • 조인 전에 필터링할 조건이 있다면, 외부 테이블과 내부 테이블에 미리 적용하여 레코드 수를 줄입니다.
    • 사전에 필터링하여 조인에 사용되는 데이터 양을 최소화하면 전체 처리 속도가 빨라집니다.
  4. 배치 사이즈 조정
    • 배치를 사용하여 데이터 처리를 묶음 단위로 수행함으로써 I/O 비용을 줄일 수 있습니다.
    • 이 방법은 특히 대규모 데이터 조인에서 유리합니다.
  5. 힌트 사용
    • USE_NL 등의 힌트를 활용해 NL 조인을 명시적으로 강제할 수 있습니다.
    • 그러나 힌트는 특정 상황에서 성능을 최적화할 때 사용하며, 필요하지 않은 경우 오히려 성능에 악영향을 줄 수 있어 신중히 사용해야 합니다.
  6. 조인 재작성
    • 만약 NL 조인 방식이 비효율적이라면, 해시 조인이나 소트 머지 조인과 같은 다른 조인 방식을 고려할 수 있습니다.
    • 특히 해시 조인은 테이블 크기가 크거나 메모리가 충분할 때 더 나은 성능을 발휘할 수 있습니다.