본문 바로가기

Hanbose Study/DB Study

[Oracle] Nested Loop Join, Sort Merge Join, Hash Join

[Oracle] Nested Loop Join, Sort Merge Join, Hash Join (04.12.20 18:14)

1 * M = M M * 1 = M 결과집합이 동일한 것처럼 Optimizer 3가지의 조인
어떤 것을 선택할지라도 결과집합은 동일하다. 하지만 수행속도 측면에서 본다면 조인하고자
하는 집합의 데이터 상황에 따라 어떤 조인을 선택하느냐, 어떤 집합을 먼저
선행하느냐에 따라 수행속도에 미치는 영향은 크다.

100
쌍의 남녀가 사랑의 짝짓기 하는 것에 비추어 3가지 조인방식이 수행되는
원리를 설명해 보자. 남녀 모두는 자기 원하는 상대방의 번호표 하나씩 가지고 있고,
사람은 여러 사람으로부터 선택 받을 있다.

첫번째 방식, 첫번째 여자는 자기가 선택한 번호표를 가지고 처음부터 차례로 남자의 번호를
확인하고, 해당 번호의 남자가 자기를 선택했는지 확인한다. 그리고 번째, 번째,..
번째 여자까지 같은 작업을 반복 수행하게 된다.
이처럼 선행 집합의 선두부터 차례로 후행집합과 조건을 비교 하면서 선행집합의
처리범위가 끝날 까지 같은 작업을 반복하는 것이 Nested Loop Join이다.
선행집합의 처리 범위가 결정지면 후행집합의 일량이 정해지는 종속적 방식이다.

두번째 방식, 남녀는 각각 자기가 선택한 상대방의 번호표(Join Key) 순으로 각각
(Sort) 선다. 그러면 중간의 아나운서가 차례로 양쪽의 번호표가 일치하는지를
확인하면서 번호표가 맞다면 짝을 지어줄 것이다. 이처럼 각각의 집합은 자기에게
주어진 조건으로 처리범위를 결정하고, 조인 컬럼으로 각각 Sort 조인하는 방식이
Sort Merge Join
이다. 처리범위를 결정하는데 독립적이다.

세번째 방식, 1번부터 100(Hash Table) 푯말이 있다. 여자측은 자기가 가지고 있는
상대방의 번호표 숫자푯말 앞에 서는 것이다(Hash Function). 물론 푯말에는 여러 명의
여자가 있을 수도, 한명도 없을 수도 있다. 다음으로 남자는 자기 번호푯말 앞으로 가서
남자가 가지고 있는 번호와 상대 여성의 번호와 맞는지를 비교하면 된다. 이처럼 선행 집합은
Hash Function
이용하여 Hash Table 구성하고, 후행집합은 차례로
Hash Function
이용하여 Hash Table 탐침하는게 Hash Join 수행 원리이다.
Hash Join
역시 처리범위를 결정하는데 독립적이다.