조인과 반복연결의 비교
조인
\-조인은 옵티마이져의 판단에 따라 먼저 처리되는 집합이 결정되어짐
\-조인방식에 따라서 달라 질수는 있지만 어떤 절차로 수행되더라도 결과는 동일하다.
반복연결
\-데이터의 연결 방식은 보장 받는다.
전체조인방식의 조인
\-테이블1에서 처리해야 할 전체데이타를 하나씩 스캔하여 대응되는 테이블2의 연결한다
\-1000번의 데이터에 접근하여도 한번의 sql를 수행한다.
\-테이블1에서 처리해야 할 전체데이타를 하나씩 스캔을 한후 조건에 맞는 sql를 수행하여 테이블2의 데이터들에 랜덤으로 접근을 한다
\-1000번의 데이터 접근에 1001번의 sql를 수행
반복연결처리 접근1
SELECT a.FLD1, ..................., b.FLD1, .............
FROM TAB2 b, TAB1 a
WHERE a.KEY1=b.KEY2
AND a.FLD='10'
ORDER BY a.FLD2;
하나의 인라인뷰로의 표현방법
SELECT x.FLD1, ................, x.FLDn, y.COL1, .................., y.COLn
FROM (SELECT FLD1, ................., FLDn
FROM TAB1
WHERE FLD='10'
ORDER BY FLD2) x, TAB2 y
WHERE y.KEY2=x.KEY1;
반복연결처리 접근2
SLEECT b.부서명, SUM(a.매출액)
FROM TAB1 a, TAB2 B
WHERE a.부서코드=b.부서코드
AND a.매출일 LIKE '200503%'
GROUP BY b.부서명;
\-두개의 테이블의 전체데이타를 모두 조인한 후 GROUP BY를 하여 매칭데이타만큼 데이터에 엑세스를 한다
\-불필요한 테이블2에 대하여 매칭작업을 반복한다
(1) SELECT 부서코드, SUM(매출액)
FROM TAB1
WHERE 매출일 like '200503%'
GROUP BY 부서코드;
\-조인을 수행한후 GROUP BY를 함으로써 테이블2는 전체 테이블1에 처리범위에 있는 모든 데이터들에 대하여 연결작업을 수행한다
(2) SELECT 부서명
FROM TAB2
WHERE 부서코드=:a.부서코드;
\-테이블1을 먼저 접근을 하여 GROUP BY를 수행 하고 그 결과물을 가지고 테이블2에 접근 한다
하나의 인라인뷰로 표현
SELECT x.부서코드, y.부서명, 매출액
FROM (SELECT 부서코드, SUM(매출액) 매출액
FROM TAB1
WHERE 매출일 like '200503%'
GROUP BY 부서코드) x, TAB2 y
WHERE y.부서코드=x.부서코드;
인라인뷰를 이용한 부분범위처리
인라인뷰를 이용하여 부분범위 처리를 하는 원리는 전체범위처리를 하는 부분을 인라인뷰로 묶어서 다른부분은 부분범위로 처리하겠다는 의미이다
원하는 집합을 우선적으로 처리하며 점차 최종 결과 집합으로 유도해가는 집합적 프로세싱이라 한다
부분처리방식에서의 비교
조인은 옵티마이져가 최적화를 수행하는 단위는 sql이기 때문에 가능하면 sql을 통합해주는 것이 좋은 활용법이라 할 수 있으나 드물게 sql을 분리함으로써 보다 유리해지는 경우도 존재한다고 한다.
전체범위 처리 : 드라이빙 조건을 만족하는 범위를 모두 스캔하여 체크조건으로 검증한 후 성공한 건에 대해 임시 저장공간에 저장한다.
저장이 완료되면 필요한 2차 가공을 한 수 운반단위만큼 추출시키고 다음 요구가 있을때까지 일단멈추게된다.
부분범위 처리 : 드라이빙 조건을 만족하는 범위를 차례로 스캔하면서 체크조건을 검증하여 성공한 건을 바로 운반단위로 보낸다.
운반단위가 채워지면 수행을 멈추고 그결과를 추출시킨다.
빠른 수행속도를 보장 받을수 있다