본문 바로가기
Work/DataBase

[SQLD] 조인원리 NL join, Sort-Merge join, Hash Join

조인 수행원리에 대해 알아보자

 

조인수행의 방법으로 3가지가 있다.

1. Nested Loop - 루프를 돌며 두 테이블의 로우를 연결하는 형식

2. Sort-Merge - 참조할 인덱스가 없는 두테이블을 정렬하여, 순차적으로 연결시켜주는 방식 

3. Hash - 두테이블이 너무 큰 경우, 해쉬맵에 저장하여, 연결시켜 조인하는 방식

 

각각의 방식에 대해서 조금더 자세히 알아보자

1. Nested Loop

원리

1. 선행테이블에서 첫번째 행을 접근.

2. 그 행의 조인할 속성을가지고 후행테이블 인덱스를 거쳐 접근 

3. 1-2번의 작업을 반복하여 맵핑하며 결과를 버퍼에 저장하여  마지막에 출력함.

 

특징

1. 선행테이블은 풀스캔하므로, 선행테이블의 크기가 작을수록 유리하다

   ( So. 두 테이블의 크기 차이가 있는 경우, 유리하게 사용될 수 있는 방법임 )

2. 후행테이블에 대해서는 반드시 인덱스가 존재해야 NL 조인이 가능하다. 

3. 절차적이며, 프로그래밍에서 FOR, WHILE문 과 같은 구조로 수행된다.

 

 

 

 

 

2. Sort-Merge

방법 : 

1. 선행 테이블의 조인 조건을 만족하는 행을 찾아 정렬함 (풀 스캔)

2. 후행 테이블의 조건을 만족하는 행을 찾아 정렬함 (풀 스캔)

3. 정렬된 두 결과를 비교하여 조인수행하고, 성공결과를 버퍼에 저장하여 출력함.

 

특징

1. 인덱스가 없어도 가능한 조인법

2. 조인시 '=' 이 아닌 경우, NL보다 유리한 방법

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

 

 

3. Hash 

Sort Merge로는 대용량 데이터 처리하기에 메모리 부하가 있어 고안된 방법

방법

1. 선행테이블에서 키를 기준으로 만족하는 행을 해쉬함수 적용하여 해쉬테이블 생성 (조인 컬럼과 select 컬럼도 저장)

2. 후행테이블에서도 똑같이 수행

3. 해쉬테이블이 완성되면 추출버터에 넣어 결과 출력

 

특징

1. 메모리사용이 큰 대용량 테이블 조인시 메모리외에 임시영역까지 사용하여 저장할수있어 유리함

2. 동등조인시에만 사용가능한 방법이므로 거의 사용이 없다.