본문 바로가기
카테고리 없음

오라클 - 데이터베이스 조인 종류

by ESTP 개발자 2023. 3. 24.

Join의 종류

 

1. Nested Loop Join

2. Sort Merge Join

3. Hash Join

 

 

Nested Loop Join

select e.ename, d.dname
from emp e, dept d
where e.deptno = d.deptno;

SQL 실행 순서

1) emp T 메모리에 복사

2) emp T에서 ename 꺼내서 임시 작업 공간으로 가져감

3) dept T에서 해당 deptno를 찾으러 가는데 where 절을 보고 해당 조건에 맞는 데이터를 찾아 dname을 가져옴

4) 한 행의 작업이 끝나면 다시 emp T로가서 두번째 행의 이름을 PGA(메모리 영역)로 가져옴

5) 다시 dept T로 가서 두번째 deptno와 동일한 deptno를 가진 dname을 꺼내옴

 

먼저 읽은 테이블의 행의 수만큼 join 됨 => from절의 테이블 순서가 중요함

Driving Table(선행 테이블), Driven Table(후행 테이블)

 

 

Sort-Merge Join

select e.ename, d.dname
from emp e, dept d
where e.deptno = d.deptno;

SQL 실행 순서

1) emp T의 ename을 가져오고 이를 통해 dept T의 dname의 값을 찾음

where 절의 조건을 기준으로 정렬(Sort) ->  조건에 맞는 dname을 비교해 값을 가져옴

 

인덱스가 존재하면 해당 T 전부 읽지 않고 데이터를 찾은 후 T로 가서 바로 데이터 읽기 가능

인덱스가 없을 경우에도 빨리 해당 데이터를 찾아서 결과를 출력해야하는 경우에 Sort-Merge join 방법 사용

 

단점 : Sort할때 시간이 오래 걸림, where 절에 잘못된 조건 주면(or 안 주면) 올바른 데이터 못 가져옴

 

Hash Join

select e.ename, d.dname
from emp e, dept d
where e.deptno = d.deptno;

양쪽 테이블 모두 join 칼럼에 인덱스가 없을 때 사용

1) 두 테이블 중 범위가 좁은 테이블을 메모리로 가져옴

2) join 조건의 칼럼의 데이터를 hash 함수에 넣어서 나온 hash value로 hash T 생성

3) 후행 테이블의 join 조건을 hash 함수에 넣어 hash value 생성, 이 값을 선행 T의 hash T의 값과 비교해 같은 값 찾아 매칭

 

Hash Join과 Sort-Merge는 둘다 모든 테이블을 다 읽는데,

Sort-Merge Join에서 정렬을 실행하지 않는다.

그래서 성능이 2배가 차이난다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 : [오라클] Join 원리, 개념 파악하기(loop join, sort_merge join, hash join) :: 개발/일상_Mr.lee (tistory.com)

댓글