쿼리 튜닝 요청드립니다. 0 3 1,944

by 승환부인 [SQL Query] [2013.10.25 16:49:27]


UT_PINOUT 테이블은 10000번 공정에서 완성되어 OUT으로 만들어진 ID 'KJX3I1234' 가
20000번 공정으로 IN(투입) 되는 용도의 테이블인데요..

아래 쿼리를 좀 더 오라클 함수를 써서 쿼리 속도를 좀 개선하고 싶은데..

UT_PINOUT 테이블안에 데이터가 무척 많거든요...자꾸 이 쿼리로 문제가 생겨서...

2주 고민하고 글 등록합니다...

도움 요청합니다. 고수님들 지혜를 모아주세요..ㅜㅜ


SELECT A.LARGEDATA
  ,A.FLOT
  ,A.SUBID
  ,A.PRODID
  ,A.QTY
  ,A.MODELID
  ,A.REGDATE
  ,B.FLOT
  ,DECODE(B.FLOT,null,'2','1') AS RANK
FROM
(SELECT TO_CHAR(C.REGDATE,'YYYYmmDD') AS LARGEDATA
   ,C.LOTID    AS FLOT
   ,B.SUBID AS SUBID
   ,B.PRODID   AS PRODID
   ,A.QTY   AS QTY
   ,B.MODELID  AS MODELID
   ,B.REGDATE AS REGDATE
  FROM  UT_PWIP  A
   ,UT_PLOT  B
   ,LOT   C
   ,PRODUCT   D
  WHERE A.PROCID    = '20000'
   AND  A.SUBID  = B.SUBID
   AND  B.LOTID = C.LOTID
   AND  C.LOTTYPE   = 'F'
   AND  A.PRODID    = D.PRODID(+)
   AND   B.MODELID IN (SELECT B.MODELID
    FROM UT_PWIP A, PRODUCT_MODEL B
   WHERE A.SUBID = 'KJX3I1234'
AND A.PRODID = B.PRODID
)
) A,
   (SELECT /*+ no_merge(A)*/ DISTINCT A.FLOT
  FROM  (SELECT A.FLOT , B.SUBID
   FROM (SELECT  DISTINCT C.LOTID AS FLOT
   FROM  UT_PWIP  A
    ,UT_PLOT  B
    ,LOT   C
    ,PRODUCT   D
   WHERE A.PROCID    = '20000'
    AND  A.SUBID  = B.SUBID
    AND  B.LOTID = C.LOTID
    AND  C.LOTTYPE   = 'F'
    AND  A.PRODID    = D.PRODID(+)
    AND  B.MODELID IN (SELECT B.MODELID
FROM UT_PWIP A, PRODUCT_MODEL B
    WHERE A.SUBID = 'KJX3I1234'
  AND A.PRODID = B.PRODID
  )
   ) A, UT_PINOUT B
   WHERE A.FLOT = B.LOTID
AND B.PROCID = '10000'
AND B.INOUTTYPE = 'OUT') A ,UT_PINOUT B
 WHERE  A.SUBID = B.SUBID
   AND  B.LOTTYPE = 'B'
   AND  B.INOUTTYPE = 'IN'
   AND  B.REGDATE > SYSDATE - 7) B
 WHERE  A.FLOT = B.FLOT(+)
 ORDER BY RANK, LARGEDATA, A.FLOT, SUBID

by 강서꽃미남 [2013.10.25 17:45:19]
플랜을..

by 마농 [2013.10.28 18:01:44]
SELECT  TO_CHAR(c.regdate,'yyyymmdd') AS largedata
     ,  c.lotid    AS flot
     ,  b.subid    AS subid
     ,  b.prodid   AS prodid
     ,  a.qty      AS qty
     ,  b.modelid  AS modelid
     ,  b.regdate  AS regdate
     ,  (SELECT  NVL(MIN(1), 2)
           FROM  ut_pinout bb
              ,  ut_pinout bbb
          WHERE  bb.lotid      = b.lotid
            AND  bb.procid     = '10000'
            AND  bb.inouttype  = 'OUT'
            AND  bbb.subid     = bb.subid
            AND  bbb.lottype   = 'B'
            AND  bbb.inouttype = 'IN'
            AND  bbb.regdate   > sysdate - 7
            AND  ROWNUM <= 1
         ) AS rank
  FROM  ut_pwip  a
     ,  ut_plot  b
     ,  lot      c
     ,  product  d
 WHERE  a.procid   = '20000'
   AND  a.subid    = b.subid
   AND  b.lotid    = c.lotid
   AND  c.lottype  = 'F'
   AND  a.prodid   = d.prodid(+)
   AND  b.modelid IN (SELECT b.modelid
                        FROM ut_pwip a
                           , product_model b
                       WHERE a.subid = 'KJX3I1234'
                         AND a.prodid = b.prodid
                      )
 ORDER BY rank, largedata, flot, subid
;

by 승환부인 [2013.10.29 13:37:29]

대학시절부터 도움 받았었는데..

직장다니면서도 이렇게....진심으로 감사드립니다.

쿼리 이해도 훨씬 잘되고 속도도 개선되었습니다^^

더 열심히 공부해야겠습니다! 감사합니다.!!!!^^

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