인덱스 조인

2010. 12. 28. 16:45카테고리 없음


                 SELECT
           TXN_ORG_CD ORG_CD,
           0 TYPE_SUM,
           0 TYPE1,
           0 TYPE2,
           0 TYPE3,
           0 TYPE4,
           0 TYPE5,
           0 TYPE6,
           0 TYPE7,
           0 TYPE8,
           0 TYPE9,
           0 TYPE10
        ,0 type11
        ,COUNT(DISTINCT SID||SNO||BRQ_APPL_DT) type12
        FROM 급여원부
        WHERE fd_san_dt BETWEEN '20100101'||'000000' AND '20101130'||'235959'
  AND SAN_GBN_CD||'' = '2'
  AND EXC_GBN_CD||'' = '0'
        GROUP BY TXN_ORG_CD

급여원부_IND_04 인덱스는 fd_san_dt + txn_org_cd + san_gbn_cd + exc_gbn_cd
이고 위 쿼리의 경우 txn_org_cd 가 '15001%' 조건이 안으로 푸시되어
group by를 제외한 조건을 만족하는로우수가 135,559 건입니다.
다시 말해서 인덱스로 찾은 조건이 135,559건이고 테이블을 찾아간 건수 135,559건이라서
비효율은 없습니다만 이것만 해도 108초가 걸립니다.
개발자에게 물어보니 자주 쓰는 쿼리라고 하네요

집계테이블을 설계해서 성능을 높일 수 있는 방법이 없을까요?
조건에 맞는 count를 세야 되는데 집계로도 해결이 안 될 듯 한데
혹시 sid + sno + brq_appl_dt 인덱스를 만들어서 index_join을 해볼까요?

급여원부_IND_04 fd_san_dt + txn_org_cd + san_gbn_cd + exc_gbn_cd
급여원부_IND_11 sid + sno + brq_appl_dt
select /*+ index_join(급여원부 급여원부_IND_04 급여원부_IND_11) */