쿼리 문의 드립니다. 0 8 1,275

by 손님 [DB 기타] 쿼리 [2013.05.28 15:36:12]



안녕하세요?

너무 속도가 안나오는 쿼리가 있어 문의 드리고자 합니다.


조건절에 서브쿼리가

AND ( K.AA, K.BB, K.CC) IN (SELECT R.AA, R.BB, R.CC FROM ~~~)

이런식으로 걸려있습니다.

서브쿼리 자체는 오래 걸리지 않는데  K.AA, K.BB, K.CC 가 조합으로 조건으로 걸리다 보니

시간이 오래걸리는것 같은데,,, 이것을 어떻게 변경해줘야 할까요??

WITH절을 써야할지 다른 방법이 있는지 답변 부탁드립니다.

감사합니다.
by 아발란체 [2013.05.28 15:48:07]

구문만으로 속도가 오래 걸리는 부분이라 판단하기 어려운 것 같습니다.

(K.AA, K.BB, K.CC) 에 해당 하는 부분이 인덱스를 타는지 확인이 필요 할 것 같고요,
인덱스를 타더라도 비용이 적게 나오는지도 확인이 필요 할 것 같고요,
마지막으로 서브쿼리가 all fetch를 해도 정말 빨리 수행되는 구문인지도 확인이 필요할 것 같습니다.


by 손님 [2013.05.28 16:05:44]

전체 메인 쿼리에서 저 조건절을 빼고 돌리면 약 5초정도이며
저 조건이 들어가면 120초가 걸립니다.
그래서 AND ( K.AA, K.BB, K.CC) IN (SELECT R.AA, R.BB, R.CC FROM ~~~) 이 조건절
튜닝이 필요 하다고 생각됩니다..
조건절의 서브쿼리  (SELECT R.AA, R.BB, R.CC FROM ~~~)  만 따로 실행할 경우에도
3~4초 정도밖에 걸리지 않습니다.


by 손님 [2013.05.28 16:08:15]

또한 (K.AA, K.BB, K.CC) 에 인덱스가 생성되어 있긴한데,, plan을 보니 인덱스를 안타네요 ㅠ

by 채용근 [2013.05.28 16:17:39]

결합으로 생성되어있나요?

by 아발란체 [2013.05.28 16:20:11]

생성된 인덱스 정보를 올려주시면 도움이 되겠네요.

그리고 select full fetch가 5초이고, 서브 쿼리 full fetch가 4초 정도가 아닌 것 같은디용?
5초 걸린 데이타 총건수와 4초 걸린 서브 질의 총 데이타 건수를 알려주시겠어용?


by 손님 [2013.05.28 16:26:59]

K.AA, K.BB, K.CC 는 결합으로 생성되어있습니다.

AND ( K.AA, K.BB, K.CC) IN (SELECT R.AA, R.BB, R.CC FROM ~~~) 조건절을

제외하고 실행시 3000건정도이며

서브쿼리 (SELECT R.AA, R.BB, R.CC FROM ~~~) 는 약 2300건입니다.

by 손님 [2013.05.28 16:36:50]

-- EXISTS 로 바꿔보세요
AND EXISTS (
  SELECT 1 FROM ~~~
   WHERE R.AA = K.AA
AND R.BB = K.BB
AND R.CC = K.CC
AND ROWNUM = 1)


by 손님 [2013.05.28 17:03:30]

exists로 바꾸니 120초->10로 줄어들었네요~ 모두 감사드립니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입