Minus sql 쿼리 확인부탁드립니다. 0 4 1,026

by 이재호 [SQL Query] [2017.07.13 11:45:21]


안녕하세요 눈팅만하다가 이렇게 글을 올려봅니다.

성능이 느린 SQL을 뽑아서 확인중인데 Minus 함수를 쓰면서 성능이 지연이되는거 같아 not exists로 변경해서 수행했는데.

not exists를 어느 부분에 넣어야 될까요?  Minus 부분을  and not exists로 수정했는데 결과값이 달라서 난감하더라구요

해당 SQL을 첨부드리오니.. 답변부탁드립니다. 고맙습니다. ^^

by 마농 [2017.07.13 14:54:56]

원래의 쿼리가 맞는지 의구심이 듭니다.
위 아래 동일 테이블(tsd72)이 사용되었지만 서로 조건이 다르네요.
보통 일관성 잇게 같은 조건을 사용하는 경우가 많은데요.
위, 아래 공통 조건
  - g_bub_cd = :x
  - sdfee_gbncd = '1'
  - deliv_ins_day BETWEEN :x AND :x
위에만 있는 조건
  - flag = '4'
위, 아래 공통으로 있는 듯 하지만 테이블이 다른 컬럼 조건으로 결국 다른 조건
  - spsd_gbn = '1'
  - spsd_gbn 컬럼이 위에서는 tsd72 의 컬럼, 아래에서는 tsd77 의 컬럼이네요
조건이 일관성이 있어야 할 것 같은데. 그렇지 않으니 의심이 가네요.


by 이재호 [2017.07.13 15:44:17]

마농님 해당 SQL은 DB에서 성능이 제일 느린 SQL를 추출해서 그대로 가져온거라 수정한 부분은 없습니다. 저 SQL를 튜닝을 한다면 어떤식으로 해야될까요?

저 SQL를 개발한 개발자가 없어서  어떤 용도로 사용하는지는 모르겠습니다.

 


by 마농 [2017.07.13 16:49:28]
SELECT b.g_bub_cd
     , b.woo_no
     , REPLACE(b.deliv_ins_day, '.') deliv_ins_day
  FROM tsd77 a
     , tsd72 b
 WHERE a.g_bub_cd(+) = b.g_bub_cd
   AND a.woo_no  (+) = b.woo_no
   AND a.spsd_gbn(+) = '1'
   AND b.sdfee_gbncd = '1'
   AND b.g_bub_cd    = :v_g_bub_cd
   AND b.deliv_ins_day BETWEEN TO_CHAR(         TO_DATE(:v_ym, 'yyyymm') , 'yyyy.mm.dd')
                           AND TO_CHAR(LAST_DAY(TO_DATE(:v_ym, 'yyyymm')), 'yyyy.mm.dd')
   AND a.woo_no IS NULL
 GROUP BY b.g_bub_cd, b.woo_no, b.deliv_ins_day
 HAVING COUNT(CASE WHEN b.spsd_gbn = '1' AND b.flag = '4' THEN 1 END) > 0
;

 


by 이재호 [2017.07.13 19:08:56]

와.. 쿼리 하나만 가지고도 대단하시네용.. 고맙습니다. 마농님 ^^

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