본문 바로가기

Oracle/Tuning

[Oracle] 조인 수행 원리

1. NL Join (Nested Loops)
중첩 for 문 형태로 조인을 수행

for driving table
{
  for the other one
  {
     join statement
  }
}

 작업 방법
  1. 선행 테이블에서 주어진 조건을 만족하는 행을 찾음
  2. 선행 테이블의 조인 키 값을 가지고 후행 테이블에서 조인 수행
  3. 선행 테이블의 조건을 만족하는 모든 행에 대해 1번 작업 반복 수행

first_rows 에 적합한??
조인이 셩공하면 바로 조인 결과를 보여 줄 수 있음.

2. Sort Merge Join
조인 컬럼을 기준으로 데이터를 정렬하여 조인을 수행
스캔 방식으로 데이터를 읽는다. 
단점: 메모리 딸리면 성능 저하 (소트 작업)
대량 조인 성능 비교 - 해쉬조인>소트머지조인
장점: 동등 조건 뿐만 아니라 비동등 조건에서도 사용 가능

작업 방법
  1. 선행 테이블에서 조건 만족 행을 찾음
  2. 키 기준 정렬 작업
  3. 반복 수행
  4. 후행 테이블에서 조건 만족 행을 찾음
  5. 키 기준 정렬 작업 수행
  6. 반복 수행
  7. 조인 수행

3. Hash Join
조인 컬럼을 기준으로 해쉬함수를 수행하여 서로 동일한 해쉬 값을 갖는 것들을 가지고 실제 값도 같은지 비교 하여 조인을 수행
특징: NL Join의 랜덤 액서스 문제점과 Sort Merge Join의 문제점인 정렬 작업의 부담을 해결하기 위한 대안
조인 컬럼의 인덱스를 사용하지 않는다. 
해쉬코드를 사용하기 때문에 '='로 수행하는 동등 조건에서만 사용 가능
메모리에 해쉬 테이블 생성 (작은걸로 드라이빙할 것) 

작업 방법
  1. 선행 테이블에서 조건 만족 행을 찾음
  2. 해쉬 함수를 적용하여 해쉬 테이블을 생성 (컬럼 정보도 함께 저장)
  3. 반복 수행
  4. 후행 테이블에서 조건 만족 행을 찾음
  5. 해쉬 함수 적용하여 해당 버킷을 찾음
  6. 조인 수행
  7. 후행 테이블에 대한 반복 수행