--- 튜닝 전
select b.대리점번호, b.계약상태코드, count(*) as 계약건수 , max(b.계약일자) as 최근계약일
from 대리점 a, 계약 b
where a.대리점번호 = b.대리점번호
and to_char (b.계약일자, 'yyyymm') = :v_date_contract
and b.계약상태코드 in (select 코드 from 코드테이블 where 그룹코드 = 'A01') --- 이 부분이 예측이 어려움
and a.업체 =: v_업체코드
group by b.대리점번호, b.계약상태코드
order by b.대리점번호
;
select b.deri_no, b.con_code, count(*) as con_count , max(b.con_date) as last_date
from deri a, contract2 b
where a.deri_no = b.deri_no
and to_char (b.con_date, 'yyyymm') = '199511'
and b.con_code in (select con_code from code where group_code = 'A01')
and a.co_code ='A590'
group by b.deri_no, b.con_code
order by b.deri_no
;
--- 튜닝 후
1) 계약일자가 'yyyymm' 형식으로 입력 될 경우
select /*+ ordered use_nl(b) index (a 대리점_x01) index(b 계약_x01) */ b.대리점번호, b.계약상태코드, count(*) as 계약건수 , max(b.계약일자) as 최근계약일
from 대리점 a, ( select /*+ ordered use_nl(d) index(d 계약_x02) */ d.대리점번호 , d.계약일자, d.계약상태코드
from 코드테이블 c , 계약 d
where c.코드 = d.코드
and c.그룹코드 = 'A01'
) b
where a.대리점번호 = b.대리점번호
and b.계약일자 = to_date(:v_date_contract,'')
and a.업체 =: v_업체코드
group by b.대리점번호, b.계약상태코드
order by b.대리점번호
;
2) 계약일자가 'yyyymmdd' 형식으로 입력 될 경우
select /*+ ordered use_nl(b) index (a deri_x01) index(b contract2_x01) */
b.deri_no, b.con_code, count(*) as con_count , max(b.con_date) as last_date
from deri a, ( select /*+ ordered use_nl(d) index(d contract2_x02) */ d.deri_no , d.con_date, d.con_code
from code c , contract2 d
where c.con_code = d.con_code
and c.group_code = 'A01'
) b
where a.deri_no = b.deri_no
and to_char (b.con_date, 'yyyymm') = '199511'
and a.co_code = 'A590'
group by b.deri_no, b.con_code
order by b.deri_no
;
--- 인덱스
대리점_pk = 대리점번호
대리점_x01 = 업체코드 + 대리점번호 --- 인덱스만 읽고 처리 가능
계약_pk = 계약번호
계약_x01 = 대리점번호 + 계약일자 + 계약상태코드
계약_x02 = 계약상태코드
create index deri_x01 on deri(co_code, deri_no) ;
create index contract2_x01 on contract2(deri_no, to_char(con_date,'yyyymm') , con_code ) ;
create index contract2_x02 on contract2(con_code) ;
'ORACLE > SQLP' 카테고리의 다른 글
SQLP 시험 문제 7일차 (0) | 2016.11.24 |
---|---|
SQLP 시험문제 6일차 (0) | 2016.11.24 |
sqlp 19회 실습문제 2번 테스트 테이블 작성 (0) | 2016.11.04 |
SQLP 19회차 실습문제 2번 (0) | 2016.11.03 |
SQLP 19회차 실습 1번 문제 (0) | 2016.11.02 |