-
[Oracle] NL Join 대신에 Hash Join을 사용하는 이유공부 이야기/ORACLE 2024. 5. 3. 15:29
NL Join은 driving, driven 테이블을 루프를 돌며 반복하는 방식이다.
선행 테이블에서 나온 결과값에 대해 후행 테이블에서 동치 혹은 범위 조회 연산을 한다.
후행 테이블에서 N번의 탐색 연산을 수행하기 때문에 선행 테이블의 볼륨이 너무 많거나
선행 테이블에 인덱스가 존재하지 않아 조회 속도가 느린 경우 Hash Join을 사용하는 방식이 효과적일 수 있다.
인덱스가 없는 대신 선행 테이블에 대해 해시 테이블을 만든 후, 후행 테이블에 대해 동치 연산을 진행하는데
N번의 연산 대신 해시 함수를 이용한 O(1) 연산을 수행하면 조회 속도를 개선할 수 있기 때문이다.
해시 테이블은 만들어지는데도 시간이 걸릴 수 있으므로 두 개의 테이블 중 크기가 작은 테이블을 생성하도록 조인 순서를 정하는 것이 효과적이다.
해시테이블은 PGA 메모리에 생성이 된다. 크기가 커지는 경우 테이블 스페이스에 생성이 될 수 있다.
Plan에서 Physical Write가 발생하는 것으로 확인할 수 있다.
지나치게 커지는 경우 오히려 Disk I/O를 발생하기 때문에 주의할 필요가 있다.
'공부 이야기 > ORACLE' 카테고리의 다른 글
[Oracle] Direct Path I/O (0) 2024.05.08 [Oracle] RAC Failover 처리 과정 (0) 2024.05.03 [Oracle] HWM(High Water Mark), PCT, freelist (0) 2024.04.30 [Oracle] 서브 쿼리에 대해서 (0) 2024.04.30 Oracle 서버 시작하기, 종료하기 (0) 2024.04.29