SQL*Plus, Inline view의 활용 – 부분범위처리로의 유도

SQL*Plus, Inline view의 활용 – 부분범위처리로의 유도

/**
 * 수정전
 */
SELECT
	a.부서명
	, b,성명
	, c.년월
	, c.급여총액
FROM 부서 a, 사원 b, 급여 c
WHERE b.부서코드 = a.부서코드
AND c.사원번호 = b.사원번호
AND a.위치 = '서울'
AND b.직책 = '과장'
AND c.년월 BETWEEN '199001' AND '199712'
ORDER BY a.부서명, b.입사일, c.년월; /* 부분범위처리 불가능 */
/**
 * 수정후
 */
SELECT
	/*+ ORDERED USE_NL(x y) */
	x.부서명
	, x.입사일
	, x.사원번호
	, x.성명
	, y.년월
	, y.급여총액
FROM 
(
	SELECT
		a.부서명
		, b.입사일
		, b.사원번호
		, MAX(b.성명)
	FROM 부서 a, 사원 b
	WHERE b.부서코드 = a.부서코드
	AND a.위치 = '서울'
	AND b.직책 = '과장'
	GROUP BY a.부서명, b.입사일, b.사원번호
) x, 급여 y
/**
 * 꼭 필요한 부분만 전체범위처리
 */
WHERE y.사원번호 = x.사원번호
AND y.년월 BETWEEN '199001' AND '199712';
/**
 * 전체적으로는 부분범위처리
 */ 

원문 출처
Encore – 대용량 데이터베이스

Leave a Reply