행위

Use hash aggregation

DB CAFE

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
  1. 만약 GROUP BY 대상이 되는 레코드 수가 ORDER BY 대상 레코드 수가 훨씬 많다면,
  2. 다음과 같이 GROUP BY를 보다 효율적인 HASH GROUP BY로 처리한 후 그룹화된 소수의 레코드에 대해 SORT ORDER BY 오퍼레이션을 수행하는 경우가 더 나을 수도 있다.
SCOTT@PROD >   
SELECT /*+ USE_HASH_AGGREGATION */ 
       d.dname, COUNT (empno) empcount
  FROM dept d, emp e
 WHERE d.deptno = e.deptno
 GROUP BY d.dname
 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를 사용하여 얻을 수 있는 이익보다 훨씬 작다면 적용해볼 수 있다.