EXISTS절 질문이있습니다. 0 2 1,544

by 케를로스 [Oracle 기초] [2017.09.20 16:10:02]


안녕하세요 EXISTS절의 사용에대해 궁굼한게있어 질문글 올립니다.

현재 EXISTS를 이용하여 데이터를 삭제를 하고있는데요

이것의 속도향상을 위해서 방법을 찾고있습니다.

A,B,C 테이블에서

DELETE

  FROM A

WHERE EXISTS ( SELECT C.KEY

                     FROM B

                          , C

                    WHERE B.KEY = C.KEY

                       AND C.KEY = A.KEY);

 

이런 구문으로 데이터를 삭제하려고하는데요

EXISTS절 서브쿼리에서 호출되는데이터는 약 30만건정도 입니다.

그런데 KEY 같은경우 중복된 데이터들이 많아서

그룹으로 묶을경우 7000건정도로 숫자가 줄어드는데요

중복된 데이터가 많이 존재할경우에

EXISTS절에서는 중복된 조건으로 전부 작동을하는것인지

아니면 KEY가 변경될때만 조건이 작동되는지 궁굼하여 질문글 남깁니다.

 

긴글 읽어주셔서 감사합니다.

by 마농 [2017.09.20 16:38:32]

Exists 는 존재여부만 판별하므로 중복된 모든 건을 다 읽지 않습니다.
a 를 루프돌면서 조건에 맞는 1 건만 b,c 에서 탐지되면 탐색을 멈추고 다음 a 로 넘어갑니다.
따라서 a 의 건수가 적고 b,c 의 건수가 중복으로 많을 때 유리합니다.
반대로 a 의 건수가 많고 b,c의 건수가 적다면 IN 절로 바꾸는것도 고려해 볼만 하네요.


by 케를로스 [2017.09.21 16:32:44]

정말 감사합니다.

말씀하신대로 DELETE하는 테이블의 데이터가 EXISTS절의 데이터보다 많아서

IN절로 변경하였는데

확실히 속도개선이 있었습니다.

감사합니다

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