성능 문제를 생성하는 상관 하위 쿼리가 있습니다. 상관 된 부속 조회이므로 색인 힌트를 허용하지 않습니다. 그래서 대신 JOIN으로 변환하려고합니다. 아래에서 원래 쿼리와 수정 된 쿼리를 찾으십시오. 수정 된 쿼리는 행을 반환하지 않지만 원래 224 행을 반환합니다.상관 하위 쿼리를 JOIN으로 변환
이 경우 하위 쿼리 대신 JOIN을 사용하는 것이 합리적이라면 JOIN 쿼리의 문제점에 대한 통찰력을 높이십시오. 감사.
select Area_CODE,
due_DATE,
RATE,
from SCHED S
where (s.Area_CODE = 11001 and
(s.COMP_CODE = 'a'
or
(s.COMPANY_CODE = 'b'
and s.due_DATE <
(
select
nvl(min(s1.due_DATE), to_date ('31-DEC-2999', 'DD-MM-YYYY'))
from SCHED s1
where s1.AREA_CODE = s.AREA_CODE
and s1.COMP_CODE = 'c'
)
)
)
)
order by a.EFF_DATE asc, s.due_DATE asc
수정 된 쿼리
SELECT
Area_CODE,
due_DATE,
RATE
from SCHED S
LEFT JOIN
(
SELECT
NVL(MIN(s1.due_DATE), to_date ('31-DEC-2999', 'DD-MM-YYYY')) AS
min_date,
s1.AREA_CODE AS a_code
FROM
SCHED s1
WHERE
s1.COMPANY_CODE = 'c'
GROUP BY
s1.AREA_code
)
s2
ON
s2.A_CODE = s.area_code
WHERE
(
s.area_code = 11001
AND
(
s.COMP_CODE = 'a'
OR
(
s.COMP_CODE = 'b'
and s.due_DATE < s2.min_date
)
)
)
order by s.EFF_DATE asc, s.due_DATE asc
당신의 조인 코드는 괜찮지 만 서브 쿼리 코드에는 오류가 있다고 생각합니다 :'whe 다시 s1.AREA_CODE = s1.AREA_CODE'. –
내 잘못입니다. 수정하여 수정했습니다. – dotnetFAQ