DB - GROUP BY 절에서의 JOIN 실행계획 테스트

Posted 02 12, 2009 23:48, Filed under: DataBase

### SQL을 사용할때 한번 읽은 DB블럭을 다시 읽지 않도록 한다. ###

# EMP DB 블럭을 두번 읽어서 처리
부서이름으로 GROUP BY 를 하기위해 대량의 조인을 함

SELECT b.DNAME, COUNT(*) CNT, SUM(SAL) SAL
    FROM EMP a, DEPT b
    WHERE a.DEPTNO = b.DEPTNO
    GROUP BY b.DNAME
    UNION ALL
    SELECT '총계', COUNT(*), SUM(SAL)
    FROM EMP;


## trace ##
Call     Count CPU Time Elapsed Time       Disk      Query    Current       Rows
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Parse        1    0.000        0.000          0          0          0          0
Execute      1    0.000        0.000          0          0          0          0
Fetch        2    0.002        0.002          0         22          0          4
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Total        4    0.002        0.003          0         22          0          4
Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user: SCOTT (ID=60)
Rows     Row Source Operation
-------  ---------------------------------------------------
      0  STATEMENT
      4   UNION-ALL  (cr=22 r=0 w=0 time=2047 us)
      3    SORT GROUP BY (cr=19 r=0 w=0 time=1573 us)
     14     NESTED LOOPS  (cr=19 r=0 w=0 time=1065 us)
     14      TABLE ACCESS FULL EMP (cr=3 r=0 w=0 time=273 us)
     14      TABLE ACCESS BY INDEX ROWID DEPT (cr=16 r=0 w=0 time=525 us)
     14       INDEX UNIQUE SCAN PK_DEPT (cr=2 r=0 w=0 time=187 us)(Object ID 31698)
      1    SORT AGGREGATE (cr=3 r=0 w=0 time=301 us)
     14     TABLE ACCESS FULL EMP (cr=3 r=0 w=0 time=210 us)

## 실행 계획 ##
Execution Plan
--------------------------------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   UNION-ALL
   2    1     SORT (GROUP BY)
   3    2       NESTED LOOPS
   4    3         TABLE ACCESS (FULL) OF 'EMP'
   5    3         TABLE ACCESS (BY INDEX ROWID) OF 'DEPT'
   6    5           INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)
   7    1     SORT (AGGREGATE)
   8    7       TABLE ACCESS (FULL) OF 'EMP'


# EMP DB 블럭을 한번만 읽어서 처리한다.

SELECT case when no = '01' then dname
    else '총계'
    end name,
    sum(cnt) cnt, sum(sal) sal
FROM 
(SELECT b.DNAME, a.CNT, a.SAL
    FROM 
(SELECT DEPTNO, COUNT(*) CNT, SUM(SAL) SAL
            FROM EMP
            GROUP BY DEPTNO
         ) a,
DEPT b
    WHERE a.DEPTNO = b.DEPTNO
) c,
(SELECT '01' no FROM dual union all select '02' from dual) d
GROUP BY case when no = '01' then dname
    else '총계'
    end;


## trace ##
Call     Count CPU Time Elapsed Time       Disk      Query    Current       Rows
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Parse        1    0.000        0.000          0          0          0          0
Execute      1    0.000        0.000          0          0          0          0
Fetch        2    0.002        0.002          0         26          0          4
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Total        4    0.002        0.002          0         26          0          4
Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user: SCOTT (ID=60)
Rows     Row Source Operation
-------  ---------------------------------------------------
      0  STATEMENT
      4   SORT GROUP BY (cr=26 r=0 w=0 time=1836 us)
      6    NESTED LOOPS  (cr=26 r=0 w=0 time=1550 us)
      3     NESTED LOOPS  (cr=8 r=0 w=0 time=908 us)
      3      VIEW  (cr=3 r=0 w=0 time=644 us)
      3       SORT GROUP BY (cr=3 r=0 w=0 time=619 us)
     14        TABLE ACCESS FULL EMP (cr=3 r=0 w=0 time=305 us)
      3      TABLE ACCESS BY INDEX ROWID DEPT (cr=5 r=0 w=0 time=182 us)
      3       INDEX UNIQUE SCAN PK_DEPT (cr=2 r=0 w=0 time=81 us)(Object ID 31698)
      6     VIEW  (cr=18 r=0 w=0 time=572 us)
      6      UNION-ALL  (cr=18 r=0 w=0 time=520 us)
      3       TABLE ACCESS FULL DUAL (cr=9 r=0 w=0 time=171 us)
      3       TABLE ACCESS FULL DUAL (cr=9 r=0 w=0 time=201 us)

## 실행 계획 ##
Execution Plan
--------------------------------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   SORT (GROUP BY)
   2    1     NESTED LOOPS
   3    2       NESTED LOOPS
   4    3         VIEW
   5    4           SORT (GROUP BY)
   6    5             TABLE ACCESS (FULL) OF 'EMP'
   7    3         TABLE ACCESS (BY INDEX ROWID) OF 'DEPT'
   8    7           INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)
   9    2       VIEW
  10    9         UNION-ALL
  11   10           TABLE ACCESS (FULL) OF 'SYS.DUAL'
# '01', '02' 두값만 fullscan
  12   10           TABLE ACCESS (FULL) OF 'SYS.DUAL'


위의 쿼리에서 동일한 결과
NAME          CNT   SAL
----------------------
ACCOUNTING 3     8750
RESEARCH    5    10875
SALES           6     9400
총계             14    29025

※ 위 내용은, 여러 자료를 참고하거나 제가 주관적으로 정리한 것입니다.
   잘못된 정보나 보완이 필요한 부분을, 댓글 또는 메일로 보내주시면 많은 도움이 되겠습니다.
02 12, 2009 23:48 02 12, 2009 23:48


Trackback URL : http://develop.sunshiny.co.kr/trackback/135

Leave a comment

« Previous : 1 : ... 541 : 542 : 543 : 544 : 545 : 546 : 547 : 548 : 549 : ... 648 : Next »

Recent Posts

  1. HDFS - Python Encoding 오류 처리
  2. HP - Vertica ROS Container 관련 오류...
  3. HDFS - Hive 실행시 System Time 오류
  4. HP - Vertica 사용자 쿼리 이력 테이블...
  5. Client에서 HDFS 환경의 데이터 처리시...

Recent Comments

  1. 안녕하세요^^ 배그핵
  2. 안녕하세요^^ 도움이 되셨다니, 저... sunshiny
  3. 정말 큰 도움이 되었습니다.. 감사합... 사랑은
  4. 네, 안녕하세요. 댓글 남겨 주셔서... sunshiny
  5. 감사합니다 많은 도움 되었습니다!ㅎㅎ 프리시퀸스

Recent Trackbacks

  1. wireless communication systems wireless communication systems %M
  2. amazon fire television amazon fire television %M
  3. how to broadcast your own tv station how to broadcast your own tv station %M
  4. elapsed time clock for operating r... elapsed time clock for operating r... %M
  5. Mysql - mysql 설치후 Character set... 멀고 가까움이 다르기 때문 %M

Calendar

«   12 2019   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. 오라클 클럽
  4. API - Java
  5. Apache Hadoop API
  6. Apache Software Foundation
  7. HDFS 생태계 솔루션
  8. DNSBL - Spam Database Lookup
  9. Ready System
  10. Solaris Freeware
  11. Linux-Site
  12. 윈디하나의 솔라나라

Site Stats

TOTAL 2780520 HIT
TODAY 103 HIT
YESTERDAY 1360 HIT