Hash Join은 데이터베이스에서 두 테이블을 조인할 때 사용하는 효율적인 알고리즘 중 하나입니다. 이 방법은 특히 대용량의 데이터를 조인할 때 유용합니다. Hash Join은 일반적으로 다음과 같은 세 단계로 이루어집니다: 1. **Build 단계**: 작은 테이블을 선택하여 해시 테이블을 생성합니다. 해시 테이블은 메모리에 저장되며, 선택된 컬럼의 값들을 키(key)로 사용합니다. 2. **Probe 단계**: 큰 테이블의 각 행을 순차적으로 읽으면서, 해시 테이블에 존재하는지 확인합니다. 만약 해시 테이블에 매칭되는 키가 있다면, 두 테이블의 행을 조인합니다. ### Hash Join의 실제 예시 예를 들어, 두 개의 테이블인 `Employee` 테이블과 `Department` 테이블이 있다고 가정해봅시다. - **Employee 테이블:** | EmployeeID | Name | DepartmentID | |------------|-------|--------------| | 1 | Alice | 101 | | 2 | Bob | 102 | | 3 | Charlie | 101 | - **Department 테이블:** | DepartmentID | DepartmentName | |--------------|----------------| | 101 | HR | | 102 | IT | | 103 | Finance | 이제 `Employee` 테이블과 `Department` 테이블을 `DepartmentID`로 조인한다고 가정해보겠습니다. #### 1. **Build 단계** 먼저, 작은 테이블을 선택하여 해시 테이블을 만듭니다. 이 예에서는 `Department` 테이블이 상대적으로 작으므로 이 테이블을 선택합니다. | 해시 테이블 (키: DepartmentID) | |------------|----------------| | 101 | HR | | 102 | IT | | 103 | Finance | #### 2. **Probe 단계** 이제 `Employee` 테이블을 순차적으로 읽으면서 `DepartmentID`를 해시 테이블에서 찾습니다. - Alice (DepartmentID = 101): 해시 테이블에서 찾은 결과 `HR` - Bob (DepartmentID = 102): 해시 테이블에서 찾은 결과 `IT` - Charlie (DepartmentID = 101): 해시 테이블에서 찾은 결과 `HR` 조인의 결과는 다음과 같습니다: - **조인된 결과:** | EmployeeID | Name | DepartmentID | DepartmentName | |------------|---------|--------------|----------------| | 1 | Alice | 101 | HR | | 2 | Bob | 102 | IT | | 3 | Charlie | 101 | HR | ### 문제에서의 Hash Join 개념 문제에서 Hash Join에 대한 설명 중 올바르지 않은 것을 고르는 질문입니다. Hash Join의 특성을 정리하자면: - Hash Join은 일반적으로 테이블을 구분하지 않고 수행합니다. - 해시 조인은 Equal Join(동등 조인)에서 주로 사용되며, Non-Equal Join에서는 사용되지 않는 것이 일반적입니다. - 해시 테이블을 메모리에 올려두기 때문에 CPU 사용량이 증가할 수 있으며, Random Access(임의 접근)가 발생할 수 있습니다. - 작은 테이블이 해시 테이블로 선택되어야 하며, 큰 테이블을 프로브(probe)로 사용합니다. 따라서 문제에서 주어진 설명 중 틀린 것을 선택할 때 이 점들을 염두에 두어야 합니다.