Oracle 실행 플랜에서 HASH와 SORT를 알아보자

러브굿·2025년 4월 2일

오라클 실행 계획의 HASH / SORT 오퍼레이션 종류와 차이

📦 공통 개념: 정렬(SORT) vs 해시(HASH)

항목SORT 기반 방식HASH 기반 방식
방식데이터를 정렬한 후 연산 수행해시 테이블을 만들어 연산 수행
속도데이터가 작을 때 유리데이터가 클 때, 메모리가 충분하면 유리
자원TEMP 공간 사용 (디스크 I/O 많음)PGA 메모리 사용 (메모리 의존적)
사용처ORDER BY, DISTINCT, MERGE JOIN, GROUP BY 등HASH JOIN, HASH GROUP BY, HASH UNIQUE 등

주요 HASH 관련 오퍼레이션

✅ 1. HASH JOIN

두 테이블을 조인할 때, 한 쪽 테이블을 메모리에 올려 해시 테이블을 만든 후 다른 쪽 테이블과 매칭.

예:

SELECT * FROM emp e JOIN dept d ON e.deptno = d.deptno;

실행 계획:

| 1 | HASH JOIN         |
| 2 |  TABLE ACCESS FULL EMP |
| 3 |  TABLE ACCESS FULL DEPT |

🔸 대량 데이터를 조인할 때 성능이 좋음.
🔸 인덱스가 없어도 사용 가능.
🔸 작은 테이블을 해시 테이블로 사용 (선행 테이블).


✅ 2. HASH GROUP BY

GROUP BY 연산 시 정렬하지 않고, 해시 테이블에 그룹핑.

예:

SELECT deptno, COUNT(*) FROM emp GROUP BY deptno;

실행 계획 (힌트 사용 시):

| 1 | HASH GROUP BY     |
| 2 |  TABLE ACCESS FULL EMP |

🔸 USE_HASH_AGGREGATION 힌트를 사용하면 유도할 수 있음.
🔸 대용량 데이터에서 TEMP 정렬 부담 없이 그룹핑.


✅ 3. HASH UNIQUE

DISTINCT 연산 시, 정렬 없이 중복 제거를 위해 해시 테이블을 사용.

예:

SELECT DISTINCT job FROM emp;

실행 계획:

| 1 | HASH UNIQUE       |
| 2 |  TABLE ACCESS FULL EMP |

🔸 SORT UNIQUE보다 메모리 효율적일 수 있음.
🔸 오라클 옵티마이저가 데이터 양과 통계에 따라 선택.


그럼 언제 SORT, 언제 HASH가 사용될까?

오라클 옵티마이저는 아래 기준으로 판단합니다:

상황선택 경향
데이터 양 적고, 인덱스가 있음SORT MERGE JOIN, SORT GROUP BY
데이터 양 많고, 인덱스 없음HASH JOIN, HASH GROUP BY
정렬이 꼭 필요한 경우 (ORDER BY)SORT ORDER BY 고정
DISTINCT 처리에 따라SORT UNIQUE 또는 HASH UNIQUE

힌트로 제어하기

  • 해시 방식 강제:
SELECT /*+ USE_HASH(t1 t2) */ ... FROM t1 JOIN t2 ...
  • 정렬 방식 강제:
SELECT /*+ USE_MERGE(t1 t2) */ ...
  • 집계에 해시 방식 사용:
SELECT /*+ USE_HASH_AGGREGATION */ deptno, COUNT(*) FROM emp GROUP BY deptno;

성능 팁 요약

  • 해시 방식은 디스크 I/O를 줄이고 메모리를 많이 쓰기 때문에, PGA 설정이 중요합니다 (pga_aggregate_target).
  • 정렬(SORT)은 TEMP 공간을 쓰므로 TEMP 테이블스페이스 모니터링이 필요합니다.
  • 실행 계획을 보면 HASHSORT가 왜 선택되었는지 감이 잡히고, 힌트를 통해 어느 정도 조정도 가능합니다.

참고)지피티

profile
마라토너형 개발자

0개의 댓글