실제로 사용해본 것은 IN 뿐이었는데 EXISTS 라는 함수도 있다는 것을 알게 되었다.
사용법은 비슷한 것 같은데 뭐가 다른지 궁금해서 정리해봄.
EXISTS 는 서브쿼리만 사용 가능하며, IN은 서브쿼리 + 단순 값도 사용가능하다.
1. NOT IN, NOT EXISTS 효과적인 튜닝방법
-데이터 제한 조건은 인덱스 사용
-데이터 불러오는 양 적게
-사용자 ORACLE FUNCTION은 자제
-NOT EXISTS보다는 EXISTS 사용 권장
2. EXISTS 실행조건
SELECT COLUMNS FROM TABLE WHERE EXISTS (subquery);
SELECT * FROM TEST A WHERE EXISTS (SELECT * FROM TEST2 B WHERE A.id = B.id)
서브쿼리에 만족하는 모든 레코드를 반환한다.
3. EXISTS와 IN 차이점
-EXISTS : 단지 해당 ROW가 존재하는지만 확인하고, 더 이상 수행하지 않음
-IN : 실제 존재하는 데이터들의 모든 값까지 확인
*NOT IN을 사용할 때 조건에 맞는 데이터가 있어도 NULL인 값은 불러오지 않으므로 NVL처리 필요
간단히 존재여부만 확인하는 거라면 더 가벼운 EXIST를 사용하는 것이 좋을 듯. 내검할 때 맨날 IN으로 사용했는데 이제 EXISTS로 써봐야겠다.
<!--참고 글 링크--!>
https://javafactory.tistory.com/522
반응형
'Database > SQL' 카테고리의 다른 글
[oracle] 테이블 n개만 뽑기 (0) | 2019.07.23 |
---|---|
[oracle] PIVOT, UNPIVOT (0) | 2019.07.21 |
[oracle] INSTR (0) | 2019.07.21 |
[oracle] Merge문 (0) | 2019.07.07 |
[oracle] NVL, NVL2, NULLIF (0) | 2019.07.07 |