카테고리 없음2022. 11. 7. 14:58

인덱스 정보

 

일별지수업종별거래및시세_FK : 지수구분코드 + 지수업종코드 + 거래일자

일별지수업종별거래및시세_X01 : 거래일자

 

튜닝전 쿼리

 

SELECT 거래일자
     , sum(decode(지수구분코드, '1', 지수종가, 0) kospi200_idx,
     , sum(decode(지수구분코드, '1', 누적거래량, 0) kospi200_idx_trdvol
     , sum(decode(지수구분코드, '2', 지수종가, 0) kosdaq_idx
     , sum(decode(지수구분코드, '2', 누적거래량, 0) kosdaq_idx_trdvol
  FROM 일별지수업종별거래및시세 a
 WHERE 거래일자 between :startDd and :endDd
   AND 지수구분코드 || 지수업종코드 in ('1001','2003')
 GROUP BY 거래일자;


    

 

튜닝 포인트

 

지수구분코드 + 지수업종코드 + 거래일자 컬럼에 해당되는 인덱스가 있으나

지수구분코드||지수업종코드 이렇게 인덱스에 포함된 컬럼이 가공되어 있어

INDEX RANGE SCAN이 되지 못하고 있다.

 

INDEX RANGE SCAN이 될 수 있도록 인덱스에 포함된 컬럼을 가공하지 않도록 아래와 같이 조건을 변경한다.

 

변경 전

AND 지수구분코드 || 지수업종코드 in ('1001','2003')

 

변경 후 

AND (지수구분코드, 지수업종코드) in (('1','001'),('2','003'))

 

 

튜닝 후 전체 쿼리

 

SELECT 거래일자
     , sum(decode(지수구분코드, '1', 지수종가, 0) kospi200_idx,
     , sum(decode(지수구분코드, '1', 누적거래량, 0) kospi200_idx_trdvol
     , sum(decode(지수구분코드, '2', 지수종가, 0) kosdaq_idx
     , sum(decode(지수구분코드, '2', 누적거래량, 0) kosdaq_idx_trdvol
  FROM 일별지수업종별거래및시세 a
 WHERE 거래일자 between :startDd and :endDd
   AND (지수구분코드, 지수업종코드) in (('1','001'),('2','003'))
 GROUP BY 거래일자;

 

출처 : 

오라클 성능 고도화 원리와 해법Ⅱ p.31

Posted by 자수성가한 부자