2024. 3. 2. 23:42ㆍDBMS/ORACLE Admin
해시 조인은 조인 키를 기준으로 한 해시 함수를 사용하여 두 테이블을 조인하는 방식이다.
1. 해시 테이블 생성 (Build Phase):
- 두 테이블 중 작은 테이블을 선행 테이블로 선택한다. 이 작은 테이블을 Build Input으로 지정함
- Build Input에서 해시 함수를 사용하여 해시 키 값을 생성하고, 이를 해시 테이블에 저장한다. 해시 함수를 사용하여 해시 키를 생성하므로 해시 키가 중복되는 경우를 최소화할 수 있다.
해시 함수는 동일한 입력에 대해 항상 동일한 해시 값을 생성하기 때문에, 서로 다른 입력 값에 대해서는 가능한 중복이 발생하지 않는다. 그러나 해시 함수가 생성하는 해시 값의 길이가 해시 테이블의 크기에 비해 작을 경우, 중복이 발생할 수 있다.
- 해시 키를 기준으로 한 해시 테이블을 만들면, 후행 테이블을 조인할 때 이를 활용할 수 있다.
2. 해시 테이블 조인 (Probe Phase):
- 큰 테이블을 Probe Input으로 선택한다.
- Probe Input의 각 행을 읽어서 해시 함수를 적용하여 해시 키를 생성한다.
- 이렇게 생성된 해시 키를 사용하여 해시 테이블에서 해당하는 값을 찾아낸다.
- 조인이 성공한 경우, 추출 버퍼에 조인된 결과를 넣는다.
해시 조인이 효과적인 경우:
- 조인 칼럼에 적당한 인덱스가 없어 Nested Loop Join이 비효율적일 때
- 조인 칼럼에 인덱스가 있더라도 Nested Loop Join에서 Inner 쪽 집합으로의 조인 액세스량이 많아 Random 액세스 부하가 심할 때
- Sort Merge Join하기에는 두 테이블이 너무 커서 소트 부하가 심할 때
- Build Input이 작을 때, 해시 키 칼럼의 중복이 없을 때 효과적
해시 조인은 큰 테이블의 모든 행을 스캔하지 않고도 매우 빠르게 조인을 수행할 수 있다. 따라서 두 테이블이 크거나 조인 키에 대한 인덱스가 없는 경우에도 효율적으로 작동할 수 있다. 하지만 해시 테이블을 생성하기 위해서는 메모리 공간이 필요하므로 메모리 용량에 따라 해시 조인의 성능이 달라질 수 있다.
'DBMS > ORACLE Admin' 카테고리의 다른 글
Nested Loop Join (0) | 2024.03.10 |
---|---|
Oracle DB SYSTEM (0) | 2024.03.10 |
인덱스 효율 (0) | 2024.03.02 |
archive log 저장 설정 (1) | 2024.02.27 |
select destination, binding, status from v$archive_dest; (1) | 2024.02.27 |