본문 바로가기

SQLD

[SQLD] HASH JOIN / NESTED LOOP JOIN / MERGE JOIN 특징 정리

HASH JOIN 

특징

1. 조인컬럼의 인덱스를 사용하지 않기 때문에 조인컬럼의 인덱스가 존재하지 않아도 사용할 수 있다.

2. '=' 으로 수행하는 조인, 동등조인에서만 사용할 수 있다. 예) a.student_id = b.student_id

3. 결과 행의 수가 적은 테이블을 선행테이블로 사용하는 것이 좋다.

4. 주로 많은 양의 데이터를 조인해야 하는 경우 사용된다.

 

NESTED LOOP JOIN

특징

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

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

3. 조인해야할 데이터가 많지 않은 경우에 유용하다.-> 프로그래밍에서 FOR,WHILE문 과 같은 구조로 수행됨.

 

MERGE JOIN 

1. 각 테이블을 따로 정렬 후 그 결과를 병합(Merge)하는 집합 연산이다.

sort를 동반함에따라 SORT-MERGE JOIN 이라고도 한다.

2. 배치성 업무에는 효율적이나 다수의 트랜잭션을 실행하는 업무에서는 비효율적일 수 있다.-> 모든 ROW를 패치한 후 처리할 때까지는 결과를 확인할 수 없는 집합연산을 하기 때문이다.

3. 테이블의 순서는 중요하지 않다. (선행,후행테이블 모두 풀스캔함)

4. 대체적으로 느리다.

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

6. '='이 아닌 경우, NL보다 유리한 방법

7. 두 테이블의 사이즈가 비슷한 경우에 유리함 -> 사이즈 차이가 큰 경우에는 불리, 해당 경우는 NL JOIN이 유리