데이터베이스 조인(JOIN) – Hash Join의 개념과 장단점
데이터베이스 관리 시스템(DBMS)을 사용하면서 우리는 자료의 다양한 처리를 위해 여러가지 조인 알고리즘을 사용할 수 있습니다. 그 중 해시조인”Hash Join”은 Nested Loops 조인과 Sort Merge 조인에 비해 더 효율적인 처리를 제공하며, 데이터양이 작은 테이블을 주로 처리하는데 적합한 알고리즘입니다. 이번 글에서는 Hash Join의 개념과 장단점에 대해 알아보겠습니다.
Hash Join
Hash Join은 데이터 처리의 개선사항이 필요할 경우 유용하게 사용되는 조인 알고리즘 중 하나인데요, 두 테이블 간의 조인 작업을 수행하기 위해 해시 함수를 하며 이 때문에 “Hash”라는 이름이 붙었다고 합니다.
기존의 Nested Loops 조인은 인덱스 사용에 따른 랜덤 액세스 오버헤드와, Sort Merge 조인은 정렬 작업에 따른 오버헤드가 발생할 수 있었는데요, 그러나 해시 조인은 이에 비해 각 테이블에 대한 독립적인 처리를 유지하면서도, Driving Table을 활용하여 조인을 수행 할 수 있습니다.
Hash Join의 특징
- 비교적 작은 테이블을 Driving Table로 사용 – Hash Join은 작은 테이블을 Driving Table로 활용함으로써 성능을 최적화 할 수 있습니다, 이는 HASH_AREA_SIZE로 결정되며, 메모리 내에 Hash Bucket을 저장합니다.
- Hash Algorithm 활용 – 각 테이블의 데이터를 Hash Algorithm을 통해 처리하고 조인하기 위한 연결고리를 구성합니다.
- Oracle에서의 활용 – Hash Join은 Oracle 7.3 버전부터 소개되었으나, 8 버전 이후에 점점 더 많이 사용되고 있습니다.
Hash Join의 장단점
장점
- CBO 모드에서 옵티마이저가 자동으로 판단하여 적용 가능함(통계 정보가 필요)
- Equi Join에서만 사용 가능하며, 주로 OLTP 시스템 및 데이터웨어하우스에서 활용
단점
- 많은 CPU와 메모리 자원이 필요하므로, 성능이 좋은 하드웨어 환경
- 조인 집합에 Hash Bucket을 구성하기 위해 많은 메모리와 CPU 자원이 소모 됨.
- 하드웨어 자원 부족 시 디스크 I/O가 발생하여 성능 저하 가능성이 있음.
맺으며
Hash Join은 Nested Loops와 Sort Merge 조인에 비해 작은 테이블을 주로 다루는 상황에서 더욱 효율적인 데이터 처리를 제공하는 조인 알고리즘이기는 하지만, 많은 CPU와 메모리 등 하드웨어의 높은 성능 및 자원을 요구하므로 하드웨어 환경을 충분히 고려하여 적절하게 활용해야 합니다. 그리고 데이터 처리에 있어서 어떠한 조인 알고리즘을 선택 하느냐에 따라, 성능 향상에 큰 영향을 미치므로, 주어진 상황에 맞게 최적의 알고리즘을 선택하는 것또한 관리자의 역량이라 할 수 있습니다.
이전 글 – [오라클] 조인 INNER JOIN(EQUI JOIN과 NON-EQUI JOIN)에 대해 알아보자