함수 실행속도 질문입니다. 0 3 764

by 물통20병 [Oracle 기초] 함수 실행속도 [2018.04.12 20:41:00]


함수를 실행시키는데 속도가 너무 느려서 튜닝을 하고 싶은데 어떤 방식으로 해야할지 모르겠습니다.

전체적인 흐름은 다음과 같습니다.

select sum(wgt)
  from 출고table
 where 부서코드 = 변수부서코드
   and   품목코드 = 변수품목코드
   and   날짜 >= (select 등록일
                              from 재고table 
                             where 부서코드 = 변수부서코드
                                  and 품목코드 = 변수품목코드)

이 펑션이 한번만 돌면 속도가 빠른데 어떤 경우 20번 까지 도는 경우가 있으며 이 경우에는 속도가 10초정도로 느리게나옵니다.

어떤식으로 개선하면 좋나요?

기존에 있는 table에서 있는 index를 다 탄상태라 부분의 실행계획을 조회했을시 csot는 낮은편입니다.

by 마농 [2018.04.13 08:20:01]

서브쿼리를 없애고 조인으로 변경 가능합니다.
펑션 내부만 보지 마시고 펑션을 어떻게 사용하는지도 살펴보세요.
인덱스가 적절한지 다시 한번 확인해 보세요
 

SELECT SUM(a.wgt)
  FROM 출고table a
     , 재고table b
 WHERE a.부서코드 = b.부서코드
   AND a.품목코드 = b.품목코드
   AND a.날짜    >= b.등록일
   AND b.부서코드 = :변수부서코드
   AND b.품목코드 = :변수품목코드
;

 


by 물통20병 [2018.04.13 09:18:19]

답변 감사드립니다.

펑션이 select 절에 붙어있네요 이 부분이 문제가 되고 있는걸까요?


by 마농 [2018.04.13 11:36:55]

펑션 수행 속도가 0.5초 정도 걸린다면? 20번 수행시 10초 걸리겠네요.
펑션 수행 속도를 0.1초 이내로 줄일 수 있는지?
그게 안된다면? 펑션 사용 대신 조인으로 푸는 방법을 검토해야죠.

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