데이터베이스에서 join이라고 하면 다들 inner join이나 left outerjoin 혹은 cross join 등은 많이 들어봤을 것이다.
하지만 이런 조인은 조인의 종류로 나뉜것으고 이 종류들이 데이터베이스에서 수행하는 방법이 있다.
수행방법의 조인은 Nested Loop / Sort Merge / Hash 조인이 있다.
NL (Nested Loop) Join
nl 조인이라고도 많이 부르는 이 조인 수행기법은 다음과 같다.
그림에 있는 숫자가 수행하는 순서이다.
1. 선행테이블에서 첫번째 행을 접근.
2. 그 행의 조인할 속성을가지고 후행테이블 인덱스를 거쳐 접근
3. 1-2번의 작업을 반복하여 맵핑하며 결과를 버퍼에 저장하여 마지막에 출력함.
특징은 다음과 같다.
1. 선행테이블은 풀스캔하므로, 선행테이블의 크기가 작을수록 유리하다
( So. 두 테이블의 크기 차이가 있는 경우, 유리하게 사용될 수 있는 방법임 )
2. 후행테이블에 대해서는 반드시 인덱스가 존재해야 NL 조인이 가능하다.
3. 절차적이며, 프로그래밍에서 FOR, WHILE문 과 같은 구조로 수행된다.
Sort Merge Join
다음은 sortmerge 조인이다.
수행하는 순서는 다음과 같다.
1. 선행 테이블의 조인 조건을 만족하는 행을 찾아 정렬함 (풀 스캔)
2. 후행 테이블의 조건을 만족하는 행을 찾아 정렬함 (풀 스캔)
3. 정렬된 두 결과를 비교하여 조인수행하고, 성공결과를 버퍼에 저장하여 출력함.
특징은 다음과 같다.
1. 인덱스가 없어도 가능한 조인법
2. 조인시 '=' 이 아닌 경우, NL보다 유리한 방법
3. 두 테이블의 사이즈가 비슷한경우에 유리하며, 사이즈 차이가 큰 경우에는 불리하고, 비효율적인 방법 (NL이 유리)
Hash Join
Hash 조인에서 사용하는 hash 라는 용어는 다른 프로그래밍에서 사용하는 해쉬와 비슷한 의미이다.
sort merge 역시 인덱스 없이 조인할수 있는 방법이지만 메모리의 문제를 cpu로 대체하는 방법으로 만들어졌다.
순서는 다음과 같다.
1. 선행테이블에서 키를 기준으로 만족하는 행을 해쉬함수 적용하여 해쉬테이블 생성 (조인 컬럼과 select 컬럼도 저장)
2. 후행테이블에서도 똑같이 수행
3. 해쉬테이블이 완성되면 추출버터에 넣어 결과 출력
특징은 다음과 같다.
1. 메모리사용이 큰 대용량 테이블 조인시 메모리외에 임시영역까지 사용하여 저장할수있어 유리함
2. 동등조인시에만 사용가능한 방법이므로 거의 사용이 없다.
'IT > Database' 카테고리의 다른 글
[Oracle]특정 컬럼명을 가진 테이블을 찾을때 (53) | 2022.07.27 |
---|---|
InsertSelect / UpdateSelect (38) | 2022.07.23 |
[Mysql] 백업 및 복원 (54) | 2022.05.20 |
[Mysql] now() , sysdate() 차이 (31) | 2022.05.13 |
Key의 종류(간결 설명) (51) | 2022.04.01 |
댓글