본문 바로가기
목차훔치기/면접을 위한 CS 전공지식 노트

해시 조인(면접을 위한 CS 전공지식 노트)

by 해삼2 2023. 10. 21.
728x90
반응형
해시 조인

해시 조인

해시 조인(Hash Join)은 데이터베이스 쿼리 처리에서 사용되는 조인(Join) 알고리즘 중 하나입니다. 

조인은 두 개 이상의 테이블에서 데이터를 결합하여 새로운 결과 집합을 생성하는 연산을 말합니다. 

해시 조인은 대용량 데이터셋을 조인하는 데 효과적인 방법 중 하나로, 

두 테이블 간의 조인 조건을 만족하는 행을 찾아내기 위해 해시(Hash) 함수를 사용합니다.

 

해시 조인 주요 특징과 작동 방식

해시 함수 사용: 

해시 조인은 조인 키(Join Key) 열의 값을 해시 함수에 입력으로 넣어 해시 값을 생성합니다. 

이 해시 함수는 입력 데이터를 무작위로 분산시키는 역할을 합니다.

해시 테이블 생성: 

두 개의 조인 대상 테이블 중 하나(일반적으로 크기가 더 작은 테이블)를 선택하고, 

해당 테이블의 각 행을 해시 함수에 적용하여 해시 테이블을 생성합니다. 

해시 테이블은 해시 값에 따라 데이터를 구조화하고 저장합니다.

조인 수행: 

다른 테이블(일반적으로 크기가 더 큰 테이블)의 각 행에 대해 조인 키를 해시 함수에 적용하여 

해당 행의 해시 값을 얻습니다. 

그런 다음, 이 해시 값을 사용하여 해시 테이블에서 일치하는 행을 검색합니다. 

이를 통해 조인 조건을 만족하는 행을 효율적으로 찾을 수 있습니다.

중복 처리: 

해시 조인은 일치하는 해시 값이 여러 행에서 발생할 수 있는 경우에 대한 중복 처리도 다룰 수 있습니다. 

중복된 해시 값이 발생하는 경우, 모든 일치 항목을 포함하는 결과를 생성할 수 있습니다.

해시 조인 장점

성능 향상:

해시 조인은 대용량 테이블 간의 조인을 빠르게 처리할 수 있으므로 쿼리 성능을 향상시킬 수 있습니다.

 

병렬 처리 가능: 

해시 조인은 병렬 처리를 쉽게 구현할 수 있어, 

멀티코어 프로세서 또는 분산 데이터베이스 시스템에서 효과적으로 활용될 수 있습니다.


메모리 사용량 제한: 

해시 테이블의 크기를 제한하여 메모리 사용을 관리할 수 있습니다.


하지만 해시 조인은 메모리 사용량에 민감하며, 

조인 키의 분포가 균일하지 않을 경우 성능이 저하될 수 있습니다. 

따라서 데이터의 분포와 테이블 크기를 고려하여 최적의 조인 알고리즘을 선택해야 합니다.

 

해시 조인 기법

내부 해시 조인(Inner Hash Join):
내부 해시 조인은 두 테이블 간의 조인 조건을 만족하는 행만을 반환합니다.
주로 두 테이블 중 하나가 작은 테이블이며, 작은 테이블의 데이터가 해시 테이블에 저장됩니다.
큰 테이블의 각 행은 해시 함수를 적용하여 해시 값으로 변환된 조인 키와 함께 해시 테이블에서 

일치하는 행을 찾습니다.

내부 해시 조인은 일치하는 행만을 반환하므로 주로 조인 결과를 필터링할 때 사용됩니다.


외부 해시 조인(Outer Hash Join):
외부 해시 조인은 두 테이블 간의 조인 조건을 만족하는 모든 행을 반환합니다.
내부 해시 조인과 마찬가지로 작은 테이블의 데이터가 해시 테이블에 저장됩니다.
큰 테이블의 각 행은 해시 함수를 적용하여 해시 값으로 변환된 조인 키와 함께 해시 테이블에서 일치하는 

행을 찾습니다.
일치하지 않는 경우에도 큰 테이블의 모든 행이 결과에 포함됩니다. 

외부 해시 조인은 주로 왼쪽 조인, 오른쪽 조인 또는 완전 외부 조인을 수행할 때 사용됩니다.
또한, 해시 조인의 변형 중 하나로는 세미 조인(Semi-Join)이 있습니다. 

세미 조인은 외부 해시 조인의 결과 중에서 작은 테이블의 행만을 반환하는 것으로, 

주로 중복을 제거하거나 필터링할 때 사용됩니다.
해시 조인은 대용량 데이터셋 간의 조인 작업을 효율적으로 수행하기 위한 유용한 도구 중 하나로, 

데이터베이스 시스템에서 자주 사용됩니다. 

각 조인 기법의 선택은 테이블 크기, 조인 키 분포, 필요한 결과 등을 고려하여 이루어져야 합니다.

 

해시 조인 자세히 알기!!

내부 해시 조인(Inner Hash Join):
가정: 두 개의 테이블이 있습니다: "주문" 테이블과 "고객" 테이블.
"주문" 테이블과 "고객" 테이블을 고객 ID를 조인 키로 사용하여 조인하려고 합니다.


내부 해시 조인의 사용 예:

이 쿼리는 "주문" 테이블과 "고객" 테이블 간의 내부 조인을 수행합니다.
결과는 "주문" 테이블과 "고객" 테이블에서 조인 조건을 만족하는 행만을 반환합니다.
사용 시나리오: 내부 해시 조인은 두 테이블 중 하나가 상대적으로 작을 때 효과적으로 사용됩니다. 

이 예에서는 모든 주문과 관련된 고객의 이름을 찾기 위해 내부 해시 조인을 사용합니다.

외부 해시 조인(Outer Hash Join):
가정:두 개의 테이블이 있습니다: "주문" 테이블과 "고객" 테이블.
"주문" 테이블과 "고객" 테이블을 고객 ID를 조인 키로 사용하여 조인하려고 합니다.


외부 해시 조인의 사용 예:

이 쿼리는 "주문" 테이블과 "고객" 테이블 간의 외부 조인을 수행합니다.
결과는 "주문" 테이블의 모든 주문과 그에 해당하는 고객 정보를 반환하며, 

고객 정보가 없는 경우 NULL 값을 반환합니다.


사용 시나리오: 

외부 해시 조인은 주로 왼쪽 조인 또는 오른쪽 조인을 수행할 때 사용됩니다. 

이 예에서는 모든 주문과 해당하는 고객 정보를 찾기 위해 외부 해시 조인을 사용합니다. 

결과에는 주문이 없는 고객 정보 또는 고객 정보가 없는 주문이 포함될 수 있습니다.

세미 조인(Semi-Join):
가정: 두 개의 테이블이 있습니다: "주문" 테이블과 "주문 대기 목록" 테이블.
"주문" 테이블에서 주문이 완료된 주문만을 찾기 위해 세미 조인을 수행하려고 합니다.


세미 조인의 사용 예:

이 쿼리는 "주문" 테이블과 "주문 대기 목록" 테이블 간의 세미 조인을 수행합니다.
결과에는 "주문 대기 목록"에 있는 주문 번호와 일치하는 "주문" 테이블의 주문 정보만을 반환합니다.


사용 시나리오: 

세미 조인은 주로 필터링 또는 중복 제거를 위해 사용됩니다. 

이 예에서는 "주문 대기 목록"에 있는 주문만을 찾기 위해 세미 조인을 사용합니다.

이러한 조인 기법들은 데이터베이스 쿼리의 목적과 필요에 따라 선택됩니다. 

내부 해시 조인은 일치하는 행만을 반환하고, 외부 해시 조인은 왼쪽 또는 오른쪽의 모든 행을 반환하며, 

세미 조인은 주로 중복을 제거하거나 필터링할 때 사용됩니다.

728x90
반응형