DB 이야기

디비 이야기 27. 조인 수행 원리

김푸른초푸른 2020. 4. 4. 12:08

1. 조인 수행 원리 


2. NL(Nested Loop) JOIN 

= 중첩 반복문과 유사한 형식 / 건수가 적을떄 사용하기 좋다

for 선행 테이블 -> 외부 테이블 (outer table)

for 후행 테이블 -> 내부 테이블 (inner table)


[작업방법과 예시]

1) 선행 테이블의 조건에 만족하는 행을 찾음

2) 선행 테이블의 조인 키 값을 가지고 후행 테이블에서 조인 수행

3) 선행 테이블의 조건을 만족하는 모든 행에 대해 1번 작업반복 수행 

=> 단점) 정렬없이 OUTER 집합을 한건씩 차례로 조인


EX)  select  t1.cola,
        t2.colb
from    table_1 t1,table_2 t2
where   t1.colx = {value}
and     t2.id1 = t1.id1
;

* 위의 Query를 For문으로 작성하면 다음과 같다.
for r1 in (select rows from table_1 where colx = {value}) loop
    for r2 in (select rows from table_2 that match current row from table_1) loop
          output values from current row of table_1 and current row of table_2
    end loop
end loop


3. SORT MERGE JOIN  

= 정렬병합 후 두 집합을 MERGE하면서 JOIN한다 (NL의 단점 극복)

그래서 대량 집합 조인시 효율적이다. / 스캔 위주라 NL처럼 반복처리를 안 하고 넘어간다. 

=> 문법은 NL과 비슷하다 

EX) select  t1.cola,
        t2.colb
from    table_1 t1,table_2 t2
where    t2.id1 = t1.id1
;


4. HASH JOIN 

= 정렬의 부담을 줄이고자 나왔다 


[동작 방법]

1) 선행 테이블에서 주어진 조건을 만족하는 행을 찾음

2) 조인의 인덱스가 없어도 사용가능하다

3) 해쉬 함수를 이용해서 조인하므로 동등조건에서만 사용가능 

4) 해쉬 조인시 두개의 테이블로 나뉜다 

1] 해쉬 테이블 : 메모리가 올라가는 테이블

2] 탐색 테이블 : 디스크에서 메모리에 있는 해쉬테이블과 조인하는 테이블 


EX) SELECT /*+ leading(a c) use_hash(c) */ => 힌트이다 
             c.고객이름,
             a.주소,
             a.관할부서,
             c.총구매액
      FROM   고객 c, 주소 a
      WHERE  c.주소 = a.주소;


=> HASH JOIN시 사용하는 힌트 

 (1) Use_hash(테블명): 해쉬조인하라는 힌트
 (2) Swap_join_inputs: 해쉬테이블을 선정할때 사용하는 힌트
 (3)No_swap_join: prob테이블을 선정할 때 사용하는 힌트
 (4) parallel(a, b) : 해쉬조인시 병렬작업하는 힌트


'DB 이야기' 카테고리의 다른 글

데이터 정의  (0) 2020.07.03
DAY 1. 사용할 id 생성   (0) 2020.04.13
디비이야기 25. PL/SQL(절차형 SQL)  (0) 2020.03.29
디비 이야기 25. 그룹함수   (0) 2020.03.16
디비 이야기 24. 계층형 질의  (0) 2020.03.16