안녕하세요~
쿼리 속도가 너무 느려 튜닝에 조언을 구하고자 합니다.
실행계획은 빠르게 나오는데 실제로 돌리면 7초이상이 걸려요
원인이 뭔지 궁금합니다.
대충 쿼리 설명을 드리면 입력을 예산연도와 추산번호를 받구요
추산번호와 예산번호로 이월여부와 추산금액과 증감추산 금액을 구하고
추산 이월여부로와 예산부서 과목코드로 배정액을 구합니다. 추산번호로 원인 seq를 구해서 결의 번호를 조회하여
결의번호로 결의테이블의 결의금액과 결의 반납 금액을 조회합니다.
증감추산T,결의반납T은 서브 테이블로 데이터가 없을수도 있습니다.
SELECT
예산연도, 예산부서, 과목코드, 추산번호
,sum(추산액)
- (
select nvl(sum( decode(추산구분,2,amt,-amt)),0) -- 2증추산 3감추산 4반납
from 증감추산T
where 예산연도=apc.예산연도 and 승인여부='Y' and 추산번호=apc.추산번호
) 추산액
,( select sum(alo_amt) alo_amt
from 배정T alo
where alo.예산연도='2017'
and alo.예산부서=apc.예산부서
and alo.과목코드=apc.과목코드
and 승인여부='Y'
and DECODE(추산이월구분, '10', 'Y', 'N') = DECODE(배정이월구분, '10', 'Y', 'N')) alo_amt
,(
select sum(결의액)-sum(nvl(RTN.결의반납액,0))
from 결의T cex
left outer join 결의반납T rtn on rtn.예산연도='2017' and rtn.예산부서=cex.예산부서 and rtn.승인여부='Y'
and rtn.cex_seq in (cex.cex_seq)
where cex.예산연도='2017' and cex.예산부서=apc.예산부서 and cex.승인여부='Y' and cex.원인번호 in (select 원인번호 from 원인T cau where 예산연도='2017' and cau.예산부서=apc.예산부서 and cau.추산번호=apc.추산번호)
) 결의액
FROM 추산T apc
WHERE 예산연도 = '2017'
AND 추산번호='10855'
AND 승인여부='Y'
group by 예산연도, 예산부서, 과목코드,추산번호, 추산이월구분
Plan hash value: 4103564949
-------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 46 | 3 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 19 | | |
|* 2 | TABLE ACCESS FULL | 증감추산T | 1 | 19 | 5 (0)| 00:00:01 |
| 3 | SORT AGGREGATE | | 1 | 41 | | |
|* 4 | TABLE ACCESS BY INDEX ROWID | 배정T | 1 | 41 | 8 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | 배정T_AK1 | 5 | | 3 (0)| 00:00:01 |
| 6 | SORT AGGREGATE | | 1 | 46 | | |
|* 7 | HASH JOIN OUTER | | 30 | 1380 | 1513 (1)| 00:00:19 |
|* 8 | TABLE ACCESS BY INDEX ROWID | 결의T | 30 | 750 | 1427 (1)| 00:00:18 |
|* 9 | INDEX RANGE SCAN | 결의T_AK1 | 1811 | | 119 (1)| 00:00:02 |
|* 10 | TABLE ACCESS BY INDEX ROWID| 원인T | 1 | 19 | 32 (4)| 00:00:01 |
|* 11 | INDEX SKIP SCAN | SYS_C00115831 | 12 | | 23 (5)| 00:00:01 |
|* 12 | TABLE ACCESS FULL | 결의반납T | 14 | 294 | 86 (3)| 00:00:02 |
| 13 | SORT GROUP BY NOSORT | | 1 | 46 | 3 (0)| 00:00:01 |
|* 14 | TABLE ACCESS BY INDEX ROWID | 추산T | 1 | 46 | 3 (0)| 00:00:01 |
|* 15 | INDEX UNIQUE SCAN | SYS_C00116410 | 1 | | 2 (0)| 00:00:01 |