반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

조인과 조인의 원리 본문

CS/데이터베이스

조인과 조인의 원리

5_hyun 2023. 2. 9. 04:49

조인(join)

조인은 2개 이상의 테이블을 묶어 하나의 테이블로 만드는 것을 의미한다. MySQL에서는 JOIN, MongoDB에서는 lookup으로 처리한다. 조인은 내부, 왼쪽, 오른쪽, 합집합 조인이 있다.

1. 내부 조인(inner join)

왼쪽 테이블과 오른쪽 테이블의 두 행이 모두 일치하는 행이 있는 부분만 표시한다. 즉, 내부 조인은 두 테이블 간 교집합을 나타낸다.

 

2. 왼쪽 조인(left outer join)

왼쪽 테이블의 모든 행이 결과 테이블에 표시된다. 즉, 왼쪽 테이블을 기준으로 오른쪽 테이블과 일치하는 레코드와 함께 집합을 생성한다. 만약 일치하는 항목이 없으면 null이 된다.

 

3. 오른쪽 조인(right outer join)

오른쪽 테이블의 모든 행이 결과 테이블에 표시된다. 즉, 오른쪽 테이블을 기준으로 왼쪽 테이블과 일치하는 레코드와 함께 집합을 생성한다. 만약 일치하는 항목이 없으면 null이 된다.

 

 

4. 합집합 조인(full outer join)

두 개의 테이블을 기반으로 조인 조건에 맞지 않는 행도 표시된다. 양쪽 테이블에서 일치하는 레코드뿐만 아니라 왼쪽, 오른쪽 테이블의 모든 레코드 집합을 생성한다. 만약 일치하는 항목이 없으면 누락된 쪽에 null 값이 포함되어 출력된다.

조인의 원리

조인의 원리로는 중첩 루프 조인, 정렬 병합 조인, 해시 조인이 있다.

중첩 루프 조인(Nested Loop Join)

중첩 루프 조인은 for문과 같은 원리로 조건에 맞는 조인을 하는 방법이다. 랜덤 접근이라 비용이 증가하여 대용량 테이블에서는 사용하지 않는다. 예시로 A, B 테이블을 조인하면 A 테이블에서 행을 한 번에 하나씩 읽고 B 테이블에서도 하나씩 읽어 조건에 맞는 레코드를 찾아 반환한다. 조인할 테이블을 작은 블록으로 나눠서 블록 하나씩 조인하는 블록 중첩 루프 조인(Block Bested Loop) 방식도 있다.

정렬 병합 조인

정렬 병합 조인은 테이블을 조인할 필드 기준으로 정렬하고 정렬이 끝난 후에 조인 작업을 수행하는 조인이다. 조인할 때 적절한 인덱스가 없고, 대용량 테이블들을 조인하고, 조인 조건에 범위 비교 연산자가 있을 때 사용한다.

해시 조인

해시 조인은 해시 테이블을 기반으로 조인하는 방법이다. 2개 테이블을 조인할 때 하나의 테이블이 메모리에 온전히 들어가면 보통 중첩 루프 조인보다 더 효율적이다. MySQL에서 해시 조인 단계는 빌드 단계, 프로브 단계로 나뉜다.

 

-빌드 단계

빌드 단계는 입력 중 하나를 기반으로 메모리내 해시 테이블을 빌드하는 단계이다. 입력 테이블 중 더 작은 바이트를 가진 테이블을 기반으로 빌드한다. 그리고 조인에 사용되는 필드가 해시 테이블의 키로 사용된다. "countries.country_id"가 키로 사용된다.

 

-프로브 단계

프로브 단계에서는 레코드 읽기를 시작한다. 각 레코드에서 "persons.country_id"에 일치하는 레코드를 찾아서 반환한다. 이를 이용해 각 테이블은 한 번씩만 읽어 증첩 루프 조인보다 보통 성능이 더 좋다. 사용 가능한 메모리양은 런타임 시에 조정 가능하다.

728x90
반응형

'CS > 데이터베이스' 카테고리의 다른 글

인덱스  (0) 2022.12.20
데이터베이스의 종류  (0) 2022.08.27
트랜잭션과 무결성  (1) 2022.08.17
ERD와 정규화 과정  (0) 2022.08.04
관계, 키  (0) 2022.07.19
Comments