안녕하세요 서브쿼리 하나 관련해서 질문드립니다.
사업소별로 갯수를 확인해서 더해야되는 쿼리를 만들었는데, 같은 테이블을 중복으로 엑세스하는 문제로 인하여 성능이 지연이 되는거 같은데 서브쿼리를 어떻게 수정해야될지 도움 부탁드립니다.
SQL은 아래와 같습니다.
select (A.CNT + B.CNT) CNT
from (select count(1) cnt
from deliver a
where a.fk_off_cd =:1
and a.year> to_char(sysdate, 'yyyy')-2
and a.fk_dep_off_cd =:2
and a.fk_dep_cd =:3
and a.fk_deli_sts_cd in( select no from code where tp='0014' and cd in('00001','00002')))A
(select count(1) cnt
from deliver a
where a.FK_OFF_CD=:4
and a.year> to_char(sysdate, 'yyyy')-2
and a.fk_dep_off_cd =:5
and a.fk_dep_cd =:6
and a.fk_deli_sts_cd in( select no from code where tp='0014' and cd ='0004')
and (a.deli1_dt = to_char(sysdate, 'yyyymmdd')
or a.deli2_dt = to_char(sysdate, 'yyyyymmdd')
or a.deli3_dt = to_char(sysdate, 'yyyymmdd')))B
조언부탁드립니다. 감사합니다.
바인드변수 값은
:1 :4 , 2: 5 , 3:6 은 서로 같습니다.
플랜은 첨부파일과 같습니다. 내부 인터넷이 안되는 상황이라, 핸드폰을 하다보니 ,, 플랜을 사진찍어서 올려봅니다.
SELECT SUM(CASE WHEN cd in('00001','00002') THEN 1 END) + SUM(CASE WHEN CD = '0004' AND to_char(sysdate, 'yyyymmdd') IN (a.deli1_dt, a.deli2_dt , a.deli3_dt ) THEN 1 END) FROM DRIVER A , CODE B WHERE A.fk_deli_sts_cd = B.NO AND a.fk_off_cd =:1 AND a.year> to_char(sysdate, 'yyyy')-2 AND a.fk_dep_off_cd =:2 AND a.fk_dep_cd =:3 AND B.tp='0014' AND B.cd IN ('00001','00002' ,'0004' )