sql 튜닝 문제좀 가르쳐 주세요~~ 0 4 4,887

by 손님 sql 튜닝 [2009.04.29 17:23:33]


데이터1.zip (3,776,477Bytes)

안녕하세요. 오라클 문제를 풀려고 하는데 잘 안되네요~~ㅠㅠ

답좀 가르쳐 주셔요..ㅠ-ㅠ  첨부 파일은 데이터 입니다..

sql 튜닝한 것과 실행계획,실행결과까지 알려주시면 정말정말 감사하겠어요..제가 열심히 하고 싶은데 도통 잘 모르겠어서요..아시는 분은 부탁 드릴꼐여~~!!

Exists Subquery를 이용한 SQL 튜닝
아래와 같이 sql문 및 index정보가 있을 경우 SQL문을 Tuning 하십시오.

문제)

1. 수정후의 실행계획, 실행결과 및 SQL문을 제출하시기 바랍니다.
2. SQL문에 대한 분석도 제출하시기 바랍니다.   

* SQL문

SELECT /*+ RULE */ X.WARE_CD,count(*)
  FROM TAB2 X, (SELECT Y.CD FROM TAB1 Y
                       WHERE Y.CD_KIND = ’2’ GROUP BY CD) Y
WHERE X.YMD = ’19990315’ AND
       X.CD = Y.CD
GROUP BY X.WARE_CD ;

* 인덱스정보(table명:인덱스명:컬럼순서)

TAB1 :  TAB1_PK : CD
TAB1 :  TAB1_I1 : CD_KIND,CD
TAB2 :  TAB2_PK : YMD,WARE_CD,CD

* 실행계획

Execution Plan
-----------------------------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   SORT (GROUP BY)
   2    1     FILTER
   3    2       INDEX (RANGE SCAN) OF ’TAB2_PK’ (UNIQUE)
   4    2       TABLE ACCESS (BY INDEX ROWID) OF ’TAB1’
   5    4         INDEX (UNIQUE SCAN) OF ’TAB1_PK’ (UNIQUE)

* trace file정보

********************************************************************************

SELECT  X.WARE_CD,count(*)
  FROM TAB2 X, (SELECT Y.CD FROM TAB1 Y
                       WHERE Y.CD_KIND = ’2’ GROUP BY CD) Y
WHERE X.YMD = ’19990315’ AND
       X.CD = Y.CD
GROUP BY X.WARE_CD

Call     Count CPU Time Elapsed Time       Disk      Query    Current       Rows
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Parse        1     0.00        85.05          0          0          0          0
Execute      1     0.00         0.70          0          0          0          0
Fetch        6 519218.75    523108.43         0    1252137          0         45
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Total        8 519218.75    523194.18         0    1252137          0         45

Elapsed Time for Client(sec.): 525783.04
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user: TUNNING00 (ID=61)

Rows     Row Source Operation
-------  ---------------------------------------------------
      0  STATEMENT
     45   SORT GROUP BY
   5696    VIEW 
   5696     SORT GROUP BY
   5696      NESTED LOOPS 
  26639       INDEX RANGE SCAN TAB1_I1 OF TAB1_I1 (NONUNIQUE)
   5696       INDEX RANGE SCAN TAB2_PK OF TAB2_PK (UNIQUE)

by 호야 [2009.04.29 21:31:38]
SELECT X.WARE_CD,count(*)
FROM TAB2 X
WHERE X.YMD = ’19990315’
AND EXISTS(SELECT '' FROM TAB1 Y
WHERE Y.CD_KIND = ’2’ AND X.CD = Y.CD)
GROUP BY X.WARE_CD ;

이게 맞을려나..-_- 아닌가...-0-;

by 서성우 [2009.04.30 10:39:56]
맞는듯 싶은데요 ㅎㅎ

by 손님 [2009.04.30 14:41:03]
실행후 sql문 외에 실행 계획이랑 결과도 좀 알수 있을까요~~??ㅜㅜ

by 호야 [2009.04.30 15:02:26]
오라클을 설치 하시고 내부에 있는 SQL을 실행 시키신다음에
dump 된 SQL 을 @~~.sql 을 실행을 시키 신후
index를 걸고...
SQL> alter session set sql_trace=true;
SQL> select ~~ 어쩌구 저쩌구.. ;
하셔서...
udump 에 가셔서.. 날짜 순으로 desc 정렬하시면 out 파일 하나 있을 겁니다
dos or linux > tkprof 숫자어쩌구.out aa.txt
dos or linux > vi or edit aa.txt

요래서 보시면 됩니다.. ^^ 수고하세욤~
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입