Select Distinct A.PartNo, A.SeqNo, A.CusCode from SujuT A,
( SELECT DISTINCT CUSCODE FROM Division_Code WHERE CUSCODE IS NOT NULL ) B
Where A.PARTNO+A.SEQNO+A.CUSCODE NOT IN ( SELECT PARTNO+SEQNO+CUSCODE FROM PARTNO )
And A.Sujuil >= '20140301'
AND A.CUSCODE = B.CUSCODE
AND A.PO_NO <> ''
위 처럼 쿼리 만드니.. 너무 오래 걸리네요.. 쩝..
SujuT 테이블에 있는 데이터와 PartNo 테이블의 데이터를 비교해서 없는 놈을 찾아 내려고 만들었는데요...
Not in 을 써서 그런지 무지 느리네요.. 쩝
SujuT 테이블이 100배는 많지만... SujuT 테이블에 등록이 먼저 되고 나중에 PartNo 테이블에 없는 놈을 찾아서 저장하는 방식이라..
쿼리를 어떻게 바꾸면 좋을까요?
좀 바주세요..ㅠ.ㅠ
Comment 6
-
맨즈밤
2014.05.09 11:42
-
Hisory
2014.05.09 12:46
제가 보기에는 A.PARTNO+A.SEQNO+A.CUSCODE 이부분때문에 확연히 느려질것 같기는 하네여..
아래 조건절 부분에 대한 데이터 건수가 많지 않고 not in 부분 제거후 속도가 빠르다면...
And A.Sujuil >= '20140301'
AND A.CUSCODE = B.CUSCODE
AND A.PO_NO <> ''아래와 같이 바꾼후 테스트 한번 해보세여..
Where A.Sujuil >= '20140301'
AND A.CUSCODE = B.CUSCODE
AND A.PO_NO <> ''And A.PARTNO+A.SEQNO+A.CUSCODE NOT IN ( SELECT PARTNO+SEQNO+CUSCODE FROM PARTNO )
option(force order) -
맨즈밤
2014.05.09 13:25
조인순서를 결정지을때 option(force order) 를 가끔씩 쓰긴하는데,,, WHERE절 에서도 적용되는건가요? -
kk
2014.05.09 14:57
http://blog.naver.com/visualdb
-
건우아빠
2014.05.09 15:18
SujuT 와 PARTNO 을 left join 으로 걸고 PARTNO에 없는것을 찾으시고.
Division_Code과 굳이 비교할 필요가 있는지.. 이것도 조인 거시는게...
ansi 쿼리로 작성하시는게 좋을듯 하네요...
tsql로 작성하시다 보니 아웃조인이 여러 컬럼일때 조인거는 컬럼과 필터 처리 부분이 명확하지 않아
조인 보다는 in, not in 을 쓰는데 안시쿼리로 작성 하시면 이 부분이 명확해져서 손쉽게 처리가 가능 합니다.
-
향지
2014.05.09 16:02
테이블 관계나 인덱스를 알면 좀 더 좋은 답변들을 주실수도 있습니다.
이것만 보고는 좋은 답변 나오기가 힘들수도 있습니다.
SELECT DISTINCT PartNo, SeqNo, CusCode
FROM SujuT
WHERE A.Sujuil >= '20140301'
AND A.PO_NO <> ''
SujiT 테이블 DISTINCT 먼저 하시고 한번 해보세요.
데이터나 인덱스가 어떻게 구성되었는지는 모르지만, 그냥 쿼리만 봤을때는... NOT IN 구문을
WHERE NOT EXISTS ( SELECT 'A' FROM PARTNO WHERE PARTNO=A.PARTNO AND SEQNO=A.SEQNO AND CUSCODE=A.CUSCODE ) )
이렇게 바꾸면 결과가 어떤가요