안녕하세요.
계층형 쿼리를 작성중 인덱스 설정 관련 해서 문의드립니다..
고객사의 요구에 따라 다음과 같은 쿼리가 생성되었는데요..
모델링상 거래일자,승인번호가 pk로 잡혀있습니다.
계층형 쿼리를 공부하던 중 대용량 계층형 쿼리의 경우 속도를 개선하기 위한 방법으로
1.start with 컬럼에 index 생성(아래쿼리->'승인번호')
2.CONNECT BY PRIOR 의 prior쪽의 컬럼이 상수가 되기때문에 ('원거래_승인번호')를 index 생성
pk_index: 거래일자,승인번호
index1: 승인번호, 원거래승인번호
or
pk_index: 거래일자,승인번호
index1:승인번호
index2:원거래승인번호
결합인덱스, 단일인덱스를 고려중인데요. index 관련해서 조언을 구하고자 합니다..
또한 , start with 부분에 in조건을 사용했는데요..이부분도 성능 개선방법이 있는지도 확인부탁드려요..
SELECT * FROM(
SELECT
ROWNUM no
,A.*
FROM TABLE A
START WITH
승인번호 IN (
SELECT 승인번호
FROM(
SELECT K.*,ROWNUM RN
FROM(
SELECT T.*
FROM(
SELECT * FROM(
SELECT A.거래일자,A.승인번호
FROM TABLE A,
(SELECT
B.원거래_승인번호
FROM TABLE B
WHERE 거래일자 BETWEEN replace('2019-07-01','-','') AND replace('2019-07-10','-','')
AND 기관코드 = 'AAA'
AND 거래구분 = '실패'
AND 거래상태 != '제외'
GROUP BY 원거래_승인번호
)B
WHERE A.승인번호 = B.원거래_승인번호
ORDER BY 거래일자 DESC, 승인번호 DESC
)WHERE ROWNUM <= (10 * 1)
UNION ALL
SELECT * FROM(
SELECT
거래일자,승인번호
FROM TABLE B
WHERE 거래일자 BETWEEN replace('2019-07-01','-','') AND replace('2019-07-10','-','')
AND 기관코드 = 'AAA'
AND 거래구분 = '성공'
AND 거래상태 != '제외'
ORDER BY 거래일자 DESC, 승인번호 DESC
)WHERE ROWNUM <= (10 * 1)
)T
ORDER BY 거래일자 DESC, 승인번호 DESC
)K
WHERE ROWNUM <= (10 * 1)
)
)
CONNECT BY PRIOR 승인번호 = 원거래_승인번호 AND 거래상태 != '제외'
ORDER SIBLINGS BY 거래일자 DESC, 승인번호 DESC
)
WHERE no BETWEEN (10 * (1 - 1) + 1) AND (10 * 1)