주케터의 메모장

[SQLD] Nested Loop Join / Hash Join / Sort Merge Join 에 대해서 알아보자! 본문

TEST/SQLD

[SQLD] Nested Loop Join / Hash Join / Sort Merge Join 에 대해서 알아보자!

JOOKETER 2023. 9. 11. 08:15
320x100

안녕하세요

주케터입니다 :)

 

오늘도 SQLD에 대해 적어보려 합니다.

 

Oracle 실행계획에 나타난 기본적인 Join 기법인

NL JOIN , HASH JOIN, SMJ 이 세가지가 생각보다

차이점을 잘 정리해둬야 겠더라고요

알듯 말듯 헷갈리는 JOIN의 세계...

 

오늘도 간단하게 알아봅시다!

 

Nested Loop Join(NL Join)

프로그래밍에서 사용하는 중첩된 반복문과 유사한 방식으로 조인을 수행

랜덤 액세스 방식으로 데이터를 읽습니다.

 

-특징-

1. 적은 행의수의 테이블을 선행으로 하면 유리합니다.

2. 유니크 인덱스를 활용해 소량 테이블을 온라인 조인하는 경우 유용합니다. (OLTP업무에 유용)

3. Driving Table의 조인 데이터의 양이 큰 영향을 주는 Join 방식입니다.

 

Hash Join

CPU 작업 위주로 처리, 해슁 기법용, NL Join의 랜덤 문제와 SMJ(Sort Merge Join)의

정렬 작업 부담을 해결하기 위한 대안으로 등장 했습니다.

 

-특징-

1. EQUI 조인에서만 사용이 가능합니다.

2. 조인 조건의 인덱스 유무영향이 없습니다.

3. 집계업무에 유리합니다.

4. Driving Table의 개념이 중요하지 않습니다. 

 

HASH 조인이 더 효과적인 조건

1. 자연조인이 비효율적일때

2. 자연조인시, 드라이빙 집합쪽으로 조인 액세스가 많아 랜덤 엑세스 부하가 심할때

3. SMJ하기에는 데이터가 너무 커서 Sort 부하가 심할때

Sort Merge Join (SMJ)

조인 칼럼을 기준으로 데이터를 정렬하여 조인을 수행, 스캔 방식으로 데이터를 읽습니다.

데이터가 너무 많으면 성능이 저하됩니다.

 

-특징-

1. NON-EQUL 조인도 사용이 가능합니다.

2. 집계업무에 유리합니다.

 


오늘은 세가지 조인의 차이점에 대해 간단하게 알아보았는데요

 

생각보다 Hash의 사용이 많을것 같네요!

 

 

그럼 안녕!

728x90