아래에는 명시안했지만 테이블1을 제외하고는 링크 테이블입니다.
----------------
SELECT COUNT(*)
FROM 테이블1 A, 테이블2@링크명 B, 테이블3@링크명 C
WHERE 조건
AND EXISTS (SELECT 1 FROM 테이블4@링크명 WHERE 컬럼 = A.컬럼)
----------------
1분 30초 이상 걸리고, EXISTS 안의 조건은 테이블4의 PK 컬럼입니다.
테이블4에는 PK를 제외한 인덱스는 없습니다.
실행계획에는 FILTER 처리되었습니다.
----------------
동일
AND A.컬럼 IN (SELECT 컬럼 FROM 테이블4@링크명)
----------------
6초 걸렸고, EXISTS 결과와 동일합니다.
실행계획에 FILTER는 처리되어 있지 않고, HASH JOIN은 동일하나 테이블4가 VIEW로 처리되었습니다.
EQUL 조인으로 하면
5초 걸리기는 하나 EXISTS와 IN 결과보다 카운트가 높게 나와버립니다.
----------------
SELECT COUNT(*)
FROM 테이블1 A, 테이블2@링크명 B, 테이블3@링크명 C, 테이블4@링크명 D
WHERE 1=1
AND A.컬럼 = B.컬럼
AND B.컬럼 = '특정값'
AND A.컬럼 = C.컬럼
AND A.컬럼 = D.컬럼
----------------
문의드리고 싶은 것은 다음 두가지 입니다.
IN 보다는 EXISTS가 성능이 무조건 좋은 것은 아닌게 맞나요?
EQUAL 조인으로 동일한 결과를 얻을 수 있는 것 아니었나요?