쿼리 튜닝 인덱스 사용 문의 ( 결합인덱스 가능? ) 0 4 639

by 달려라 [Oracle Tuning] [2020.02.14 08:43:21]


   작업TABLE
   START_DATE VARCHAR2(8)
   START_TIME VARCHAR2(4)
   END_DATE VARCHAR2(8)
   END_TIME VARCHAR2(4) 
 
   INDEX는 INDEX01 ( START_DATE + END_DATE ) 생성
 
   원하는 내용은 아래와 같이 특정 시간이 어느 작업대의 DATA를 가져 와야 됩니다.
   SELECT  *
   FROM  작업TABLE
   WHERE  START_DATE||START_TIME <=   '202010300240' 
   AND     END_DATE||START_TIME    >     '202010300240'
 
   START_TIME||START_TIME로 연결되어 있으니 인덱스를 만들어도 안먹히는데
   START_DATE||START_TIME을 하나의 컬럼(DATE 타입)을 만들어서 관리 하는것(기존운영중인 시스템으로이 방법은 제외) 이외에
   방법이 있을까요 ?
  
   위 쿼리로 FUNCTION을 만들고 외부 쿼리로 이 FUNCTION을 CALL 해야 되는데 CALL 하는 데이타가 많을수록 속도는 더 느려지네요
   아래의 방법으로 조금 줄일려고 해보았으나 이역시 데이타가 많으니 확연히 느려 지네요

   SELECT /*+ INDEX( A INDEX01 ) +*/
          *
   FROM  작업TABLE  A
   WHERE  START_DATE             <=   '2019103' 
   AND    END_DATE               >=   '2019103' 
   AND    START_DATE||START_TIME <=   '201910300240' 
   AND    END_DATE||START_TIME   >  '201910300240'  

인덱스를 2개를 동시 사용하는등의 방법이 있을까요 ?  

감사합니다.

by 마농 [2020.02.14 09:33:34]

네, 위처럼 일자 조건을 추가하면 되구요.
인덱스 구성은 일자 시간 모두 포함되도록 구성하세요.
최근걸 조회하는 빈도가 더 많다면? 종료일을 선두에 두세요.


by 달려라 [2020.02.14 09:37:41]

네 감사합니다. 

종료일자를 선두로도 했는데 조금 빨라지긴 했는데 많이 빨라지지는 않네요

 START_DATE||START_TIME   에서  ||  있어서 인덱스를 먹히게 하는 방법은 없겠죠 ?

일자+시간 합친 컬럼을 만드는게 최선이겠지요 ? ^^;;

 


by 마농 [2020.02.14 09:43:37]

함수기반인덱스(Function Based Index)도 있습니다.
어차피 기간검색 이므로 인덱스를 완벽하게 이용하는데는 한계가 있습니다.


by 달려라 [2020.02.14 10:28:33]

함수기반인덱스(Function Based Index) 로 생성 했습니다. 

도움 감사합니다.  즐거운 주말 보내세요

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