본문 바로가기
개발공부 일지/오라클

오라클)Nested Loop Join과 Hash Join과 선행 테이블

by Box Cat 2023. 6. 19.
728x90
반응형

NL Join(Nested Loop Join)

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

특징

  1. 선행테이블은 풀스캔하므로, 선행테이블의 크기가 작을수록 유리합니다
  2. (So. 두 테이블의 크기 차이가 있는 경우, 유리하게 사용될 수 있는 방법임. 선행 테이블을 일단 Full Scan을 하고, 여기서 얻은 JOIN 키로 인덱스를 스캔하고 후행 테이블에 진입함. 선행 테이블이 작아야, JOIN 키 확보 단계에서 많이 필터링이 가능함)
  3. 후행테이블에 대해서는 반드시 인덱스가 존재해야 NL 조인이 가능합니다.
  4. 인덱스 구성 전략이 특히 중요합니다. 조인 컬럼에 대한 인덱스가 있느냐 없느냐, 있다면 컬럼이 어떻게 구성됐느냐에 따라 조인 효율이 크게 달라집니다.
  5. 랜덤 액세스 방식으로 데이터를 읽는다.-> 처리 범위가 좁은 것이 유리합니다.

이런 여러가지 특징을 종합할 때, NL 조인은 소량의 데이터를 주로 처리하거나 부분범위처리가 가능한 온라인 트랜잭션 환경에 적합한 조인 방식이라고 할 수 있습니다.
 
 

Sort Merge Join

Sort Merge Join은 조인 컬럼을 기준으로 데이터를 정렬하여 조인을 수행합니다. NL Join은 주로 랜덤 액세스 방식으로 데이터를 읽는 반면 Sort Merge Join은 주로 스캔 방식으로 데이터를 읽습니다. Sort Merge Join은 랜덤 액세스로 NL Join에서 부담이 되던 넓은 범위의 데이터를 처리할 때 이용되던 조인 기법입니다. 그러나 Sort Merge Join은 정렬할 데이터가 많아 메모리에서 모든 정렬 작업을 수행하기 어려운 경우에는 임시 영역(디스크)을 사용하기 때문에 성능이 떨어질 수 있습니다.
일반적으로 대량의 조인 작업에서 정렬 작업을 필요로 하는 Sort Merge Join 보다는 CPU 작업 위주로 처리하는 Hash Join이 성능상 유리합니다. 그러나 Sort Merge Join은 Hash Join 과는 달리 동등 조인뿐만 아니라 비동등 조인에 대해서도 조인 작업이 가능하다는 장점이 있습니다.
 

특징

1.인덱스가 없어도 가능한 조인법
2.대부분 해시조인인 보다 느린 성능을 보이나, 아래와 같은 상황에서는 소트머지 조인이 유용합니다.

  • First 테이블에 소트연산을 대체할 인덱스가 있을 때
  • 조인할 First 집합이 이미 정렬되어 있을 때
  • 조인 조건식이 등차(=)조건이 아닐 때

3.두 테이블의 사이즈가 비슷한경우에 유리하며, 사이즈 차이가 큰 경우에는 불리하고, 비효율적인 방법입니다.
 
 

Hash Join

Hash Join은 해싱 기법을 이용하여 조인을 수행합니다. 조인될 두 테이블 중 작은 테이블을 FULL TABLE SCAN을 한 이후에 PGA 영역에서 해시 테이블로 먼저 만듭니다. 이후에,  조인될 테이블의 조인 키 값을 Hash 알고리즘으로 값을 바꾸고, 이 값과 해시 테이블의 값과 매치되는 값을 얻는 방식입니다. HASH JOIN은  '=' 비교를 통한 조인에서만 사용될 수 있습니다. 주로 많은 양의 데이터를 조인해야 하는 경우에 주로 사용됩니다.
해시 테이블로 만드는 선행 테이블을 Build Input, 후행 테이블을 Prove Input 이라고 합니다.
 

특징

  1. 조인 칼럼의 인덱스를 사용하지 않기 때문에 조인 칼럼의 인덱스가 존재하지 않을 경우데도 사용할 수 있는 기법.
  2. 메모리 사용이 큰 대용량 테이블 조인시 메모리 외에 임시영역(PGA 메모리)까지 사용하여 저장할 수 있어 유리함
  3. 해쉬 함수를 이용하여 조인을 수행하기 때문에 '='로 수행하는 조인에서만 사용가능.

Hash Join은 조인 칼럼의 인덱스를 사용하지 않기 때문에 조인 칼럼의 인덱스가 존재하지 않을 경우에도 사용할 수 있는 조인 기법입니다.

 
 
 
728x90
반응형

댓글