안녕하세요. 쿼리 좀 도움얻고자 글을 씁니다.
화면 목록 가져오는 쿼리인데 데이터는 10개로 짤라서 그런지 느리지만 간당하게 나옵니다만 카운트 조회가 문제네요
select count(*)
from (
select fno
from ta, tb, tc, td
where ta.fno = tb.fno
and ta.fno = tc.fno(+)
and td.fno = td.fno
) a, (
select fno as yno from te where fseq in ( select max(fseq) from te group by fno )
) b
where a.fno = b.yno(+)
)
where 절의 다른 조건들은 제거했고 테이블간 연결고리만 대략 이런 경우입니다.
두개의 인라인뷰는 각각 실행시 1초안으로 떨어지는데 저렇게 실행하면 1분30초가 걸리네요 a=약 2천건, b=약 1천건 입니다.
a만 조회되도 행갯수는 나오는데 a와b의 조인 조건뒤에 다른조건이 하나 걸릴수가있네요.
인라인뷰 b를 a안으로 같이 조인시켜봐도 똑같네요
도움 좀 부탁드립니다.
혹시 인라인뷰에도 인덱스를 적용시킬수가 있는가요?
다음 두 쿼리는 같은 쿼리입니다.
(select fno as yno from te where fseq in (select max(fseq) from te group by fno)) b
(select DISTINCT fno as yno from te) b
쿼리를 간략화 하실 때 실제 쿼리를 대변할 수 있을 정도로만 간략화 해야 합니다.
올려주신 쿼리는 실제 쿼리와 다르게 왜곡되어 있어 답변이 힘듭니다.
아우터 조인 집합이 메인 집합과 1:1 관계라면?
카운트 쿼리에서는 아우터 조인을 제거하시는게 좋습니다.