database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40833 게시물 읽기
No. 40833
sql 하나 봐주세요.
작성자
이현정
작성일
2015-06-16 14:37ⓒ
2015-06-16 14:39ⓜ
조회수
7,197

 

서버커리에 들어가는데...속도가 너무 느려요.

무엇을 챙겨 봐야 할까요?

 

 

SELECT  MAX(NVL(NO, ERE_NO)) NO
                  FROM MAST X
                 WHERE X.P_NO = 'CFFGS'
                   AND SUBSTR(X.STG,1,1) = '4'
                 START WITH X.P_NO = 'CFFGS'
                   AND X.NO = 'AP16'
                CONNECT BY PRIOR X.PRNT_NO = X.NO ;
               
인덱스 구성               
MAST_PK (P_NO,NO)
MAST_AK3(P_NO,NO,PRNT_NO,STG,ERE_NO)

 

ID PID             Operation                                                 Name                             Rows                             Bytes                         Cost           CPU        Cost IO             Cost
0                      SELECT STATEMENT  1  29  54  371004  52
1 0                    SORT AGGREGATE  1  29      
2 1                           FILTER           
3 2                              CONNECT BY WITH FILTERING           
4 3                                 INDEX RANGE SCAN SHI1.CMCTB_BLK_MAST_AK3 1  26  1  5391  1
5 3                                     NESTED LOOPS  20  600  51  365613  51
6 5                                        CONNECT BY PUMP           
7 5                                              TABLE ACCESS BY INDEX ROWID SHI1.CMCTB_BLK_MAST 20  520  50  360222  50
8 7                                                 INDEX SKIP SCAN SHI1.CMCTB_BLK_MAST_PK 20    48  342829  48
 

이 글에 대한 댓글이 총 2건 있습니다.

계층쿼리의 실행순서는 다음과 같습니다.
1. Start With
2. Connect By
3. Where


3번 Where 절이 나중에 수행되는 것을 유의해야 합니다.
Start With 와 Where 절에 공통으로 들어 있는 조건 (p_no = 'CFFGS') 이 중요한 키일 듯 합니다.
1, 3 번에 공통으로 있는 조건이 2번에는 없는거죠....
2번에 이 조건이 없어서 엄청난 뻥튀기 결과가 수행된 후 3번에서 걸러내는 형태인데요.
이 조건을 3번에서 2번으로 옮기셔서 뻥튀기를 방지해야 할 듯 합니다.


SELECT *
  FROM mast x
 WHERE x.stg LIKE '4%'
-- AND x.p_no = 'CFFGS'    -- 2. 요기 조건은 불필요
 START WITH x.p_no = 'CFFGS'
        AND x.no   = 'AP16'
 CONNECT BY PRIOR x.prnt_no = x.no
        AND PRIOR x.p_no = x.p_no    -- 1. 요기 조건 추가하면
;

마농(manon94)님이 2015-06-16 15:24에 작성한 댓글입니다.
이 댓글은 2015-06-16 15:25에 마지막으로 수정되었습니다.

정말 감사합니다. 그렇게 해결 되었네요. ^^

이현정님이 2015-06-19 08:08에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40837연속된 구간별 그룹 쿼리 문의 [1]
쿼리OTL
2015-06-18
8079
40836리스트를 만들고 싶습니다. [2]
선이
2015-06-17
7090
40835sql 조언 부탁드립니다. [1]
일쌍다반사
2015-06-17
7331
40833sql 하나 봐주세요. [2]
이현정
2015-06-16
7197
40831행님들 급합니다 제발좀 도와주세요
백광규
2015-06-14
7147
40830sql문을 buffer에 오래 두기 [2]
이현정
2015-06-11
7345
40829솔라리스 11에서 Pro*C 사용방법
김재명
2015-06-11
8370
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다