조인의 원리

Ryu·2023년 5월 15일
0

중첩 루프 조인

중첩 루프 조인(NLJ, Nested Loop Join)은 중첩 for문과 같은 원리로 조건에 맞는 조인을 사용하는 방법이며, 랜덤 접근에 대한 비용이 많이 증가하므로 대용량 테이블에서는 사용하지 않습니다. 또한 두 테이블 중 작은 테이블을 선행 테이블로 정하는 것이 유리합니다.

정렬 병합 조인

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

해시 조인

해시 조인은 해시 테이블을 기반으로 조인하는 방법입니다. 두 개의 테이블을 조인한다고 했을 때 하나의 테이블이 메모리에 온전히 들어간다면 보통 중첩 루프 조인보다 더 효율적입니다. 또한 동등(=) 조인에서만 사용할 수 있습니다.

MySQL을 기반으로 해시 조인의 과정을 살펴보겠습니다.

빌드 단계

빌드 단계는 입력 테이블 중 하나를 기반으로 메모리 내 해시 테이블을 빌드하는 단계입니다.
조인 대상 테이블 중 레코드가 적어서 해시 테이블로 만들기 용이한 테이블을 골라서 메모리에 해시 테이블을 생성(빌드)하는 작업입니다. 빌드 단계에서 해시테이블을 만들기 위해 사용되는 원본 테이블을 빌드 테이블이라 합니다.

프로브 단계

프로브 단계 동안 레코드 읽기를 시작하며, 빌드 테이블이 아닌 나머지 테이블의 레코드를 읽어 해시 테이블과 일치하는 레코드를 찾는 과정입니다. 나머지 테이블을 프로브 테이블이라고 합니다.

profile
나는야 머찐 개발자

0개의 댓글