NOT EXISTS 카운트 속도 문의드립니다. 0 4 5,264

by 레브레카 [2014.12.23 16:56:01]


SELECT COUNT(*)

FROM 테이블1 A, 테이블2 B, 테이블3 C

조건

AND NOT EXISTS (SELECT 1 FROM 테이블4 WHERE 컬럼 = A.컬럼)

 

하게되면 속도가 너무 오래걸립니다.

컬럼만 출력하는 경우는 금방 나오기는 하지만 카운트를 미리 구한후,

3만개씩 텍스트 파일로 출력하여

출력한 내용을 기반으로 MS SQL에서 조회를 해야합니다.

 

컬럼만 출력 후, Ctrl + End 하는 시간이나 COUNT(*) 하는 시간이나 비슷하네요....

 

IN, EXISTS 의 경우, 조인으로 가능하다 하더라도

NOT IN, NOT EXISTS 의 경우에는 어떻게 카운트를 빠르게 처리할지 모르겠습니다.

 

아우터 조인의 경우는 있을 수도 있고, 없을 수도 있는 의미라서 맞지가 않고....

<> 부정은 NOT EXISTS보다 더많은 비용이 발생하고...

by 아발란체 [2014.12.23 17:25:58]

음.. 조금 판단하기 애매한 것 같은데용... 조건 내용이 전체 있는 쿼리를 올려주시면 감사하겠습니다.


by 마농 [2014.12.23 17:26:42]

1. Exists 가 원인일까요?
  - 테이블4.컬럼 에 인덱스가 있는지 확인.
  - Exists 가 아닌 조인으로 변경 가능한지 확인.
2. 다른데는 문제가 없을까요?
  - 실행계획 확인.
3. Not Exists 의 성능 향상
  - Outer Join 후 Null 체크를 통해 성능이 향상됩니다.

SELECT COUNT(*)
  FROM 테이블1 A
     , 테이블2 B
     , 테이블3 C
     , 테이블4 D
 WHERE 조건
   AND A.컬럼 = D.컬럼(+)
   AND D.컬럼 IS NULL
;

 


by 레브레카 [2014.12.23 17:53:31]

빠른 답변 감사합니다.

아우터 조인에 IS NULL 조건이 들어가니 NOT EXISTS 결과와 동일하고, 성능도 향상이 되었네요.


by 신이만든짝퉁 [2014.12.24 16:34:11]

널조건 추가하는 것은 한번 해봐야 겠네요.

저도 하나 배워갑니다. ^_^
 

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