Outer Join
어떤 집합을 기준으로 해서 조인되는 다른 집합과의 연결에 실패했더라도 그 결과를 추출하는 조인
특징
조인 순서가 미리 정해지므로 조인순서를 이용한 튜닝이 불가함
가능한 Outer Join은 피하도록 함
Outer Join을 담당하는 테이블에 대한 모든 조건에 (+)기호가 붙여야 원하는 결과를 얻을 수 있음
(+)기호를 이용하여 IN, OR의 연산자를 이용하여 비교할 수 없음(Inline View를 이용하여 해결)
(+)기호를 이용하여 subquery와 비교할 수 없음(OR IS NULL 조건과 비교해야함)
Semi Join
조인과 매우 유사한 데이터 연결 방법
서브쿼리를 사용했을 때 메인 쿼리와의 연결하는 처리
Nested Loop 형, Sort Merge 형, Hash 형, Filter 형 등
Anti Join
부정형(NOT) 술어를 사용하는 서브쿼리가 있는 SELECT문
# 유형별 조인 튜닝 가이드 요약 #
– 조인순서
조인 수행의 효율은 조인 각 대상 집합의 처리 범위와 조인의 순서가 중요함
순서가 적절하지 못할 경우 처리범위 과다로 액세스 량이 증가하여 성능 저하 발생
<튜닝 가이드>
Nested Loop 조인 경우, 처리 범위를 최소화 할 수 있도록 Driving 테이블 선정
조인의 처리 범위 최소화가 중요하나 인덱스 스캔의 방해(컬럼 내/외부 변형 등) 등의 이유로 적절한 인덱스 선택이 어려워 짐으로써 조인 순서에 오류 발생 가능
통계정보가 정확하지 못할 경우, 처리 범위를 최소화할 수 있는 테이블 선정에 오류 발생 가능
부적절한 힌트(ordered) 사용시 조인의 순서에 오류 발생 가능
조인 대상이 과다하고 방법이 복잡할 경우, 통계정보와 구문상에 이상이 없을 지라도 조인의 순서에 오류가 발생 가능
<튜닝 방법>
통계정보 생성/갱신
구문 내 조인 표현의 명료화
부적절한 힌트 제거
조인 순서 강제화 힌트 적용(ORDERED)
Index Range Scan
(결합인덱스)
결합 인덱스의 가장 큰 특징은 선두 컬럼이 (=,in)으로 들어오지 않아서 범위가 넓어질 경우에
후행 컬럼의 selectivity가 좋다고 할지라도 인덱스를 액세스하는 범위를 줄여주지 못하고, 테이블을 액세스하는 범위만을 줄여 줄 수 있음.
결합 인덱스의 첫 번째 칼럼이 ‘=‘ 조건으로 사용될 경우 2번째 이후의 인덱스 칼럼이 인덱스로서의 역할을 할 수 있으므로
인덱스를 액세스하는 범위를 줄여줄 수 있음