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)로 사용합니다.
따라서 문제에서 주어진 설명 중 틀린 것을 선택할 때 이 점들을 염두에 두어야 합니다.