SQL*Plus, 논리합 연산자의 액세스 효율화 – IN을 활용한 액세스 효율화: Subquery를 이용한 IN 조건 추가

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 – 대용량 데이터베이스

Leave a Reply