행위

Use hash aggregation

DB CAFE

Dbcafe (토론 | 기여)님의 2023년 10월 26일 (목) 14:31 판 (새 문서: == USE_HASH_AGGREGATION 힌트 == * NO_USE_HASH_AGGREGATION 힌트 SCOTT@PROD > select name, version from v$sql_hint where name like '%USE_HASH_AGGREGATION%'; NAME...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
thumb_up 추천메뉴 바로가기


USE_HASH_AGGREGATION 힌트[편집]

  • NO_USE_HASH_AGGREGATION 힌트

SCOTT@PROD > select name, version from v$sql_hint where name like '%USE_HASH_AGGREGATION%';

NAME VERSION


-------------------------

USE_HASH_AGGREGATION 10.2.0.1 NO_USE_HASH_AGGREGATION 10.2.0.1


만약 GROUP BY 대상이 되는 레코드 수가 ORDER BY 대상 레코드 수가 훨씬 많다면, 다음과 같이 GROUP BY를 보다 효율적인 HASH GROUP BY로 처리한 후 그룹화된 소수의 레코드에 대해 SORT ORDER BY 오퍼레이션을 수행하는 경우가 더 나을 수도 있다.

SCOTT@PROD > SELECT /*+ USE_HASH_AGGREGATION */ d.dname, COUNT (empno) empcount

 2      FROM dept d, emp e
 3     WHERE d.deptno = e.deptno
 4  GROUP BY d.dname
 5  ORDER BY d.dname;

DNAME EMPCOUNT


----------

ACCOUNTING 3 RESEARCH 5 SALES 6

Elapsed: 00:00:00.06

Execution Plan


Plan hash value: 1778488252


| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |


| 0 | SELECT STATEMENT | | 4 | 64 | 7 (29)| 00:00:01 | | 1 | SORT ORDER BY | | 4 | 64 | 7 (29)| 00:00:01 | | 2 | HASH GROUP BY | | 4 | 64 | 7 (29)| 00:00:01 | | 3 | MERGE JOIN | | 14 | 224 | 6 (17)| 00:00:01 | | 4 | TABLE ACCESS BY INDEX ROWID| DEPT | 4 | 52 | 2 (0)| 00:00:01 | | 5 | INDEX FULL SCAN | PK_DEPT | 4 | | 1 (0)| 00:00:01 | |* 6 | SORT JOIN | | 14 | 42 | 4 (25)| 00:00:01 | | 7 | TABLE ACCESS FULL | EMP | 14 | 42 | 3 (0)| 00:00:01 |


위의 방법은 SORT ORDER BY를 사용했을 때 오버헤드가 HASH GROUP BY를 사용하여 얻을 수 있는 이익보다 훨씬 작다면 적용해볼 수 있다.