SQL*Plus, 논리합 연산자의 액세스 효율화 – IN을 활용한 액세스 효율화: Subquery를 이용한 IN 조건 추가
/** * 수정전 */ SELECT * FROM TAB1 WHERE 상품 = 'PRINTER' AND 부서 LIKE :VAL1||'%' AND 판매일자 LIKE '199807%';
상품 + 부서 + 판매일자 index를 사용한다고 가정
/** * 수정후 */ SELECT * FROM TAB1 WHERE 상품 = 'PRINTER' AND 부서 = IN ( SELECT 부서 FROM DEPT WHERE 부서 LIKE :VAL4 ) AND 판매일자 LIKE '199807%';
- 먼저 Subquery가 수행되어 n개의 =을 제공한다.
- 즉, 상품 =, 부서 =, 판매일자 LIKE 범위가 Subquery 결과 만큼 수행된다.
- Subquery로 인한 결합처리 실행계획은 아래와 같은 형태로 나타난다.
- 반드시 Subquery는 제공자가 되어야 한다.
NESTED LOOPS VIEW SORT(UNIQUE) INDEX(RANGE SCAN) OF '부서_PK TABLE ACCESS(BY ROWID) OF 'TAB1' INDEX(RANGE SCAN) OF 'INDEX1'
원문 출처
Encore – 대용량 데이터베이스