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. print & mail services print & mail services 13 07
  2. montana fishing vacations montana fishing vacations 13 07
  3. decks colorado decks colorado 13 07
  4. phoenix az closet organizers phoenix az closet organizers 13 07
  5. useful reference useful reference 13 07

Calendar

«   07 2020   »
      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 3006620 HIT
TODAY 61 HIT
YESTERDAY 1048 HIT