두개의 인라이뷰를 outer join 시 속도가 넘 느립니다. 0 1 6,407

by 몽키매직 [Oracle Tuning] [2024.08.06 20:03:44]


안녕하세요. 쿼리 좀 도움얻고자 글을 씁니다.

화면 목록 가져오는 쿼리인데 데이터는 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안으로 같이 조인시켜봐도 똑같네요

도움 좀 부탁드립니다.

혹시 인라인뷰에도 인덱스를 적용시킬수가 있는가요?

by 마농 [2024.08.07 08:35:24]

다음 두 쿼리는 같은 쿼리입니다.
(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 관계라면?
카운트 쿼리에서는 아우터 조인을 제거하시는게 좋습니다.

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