새로쓴 대용량 데이터베이스솔루션 1 (2008년)
조인과 반복연결(loop query)의 비교 0 0 5,531

by 구루비 loop query 연결고리 [2009.04.30]


2.1. 조인과 반복연결(loop query)의 비교

조인과 반복연결의 비교

조인
\-조인은 옵티마이져의 판단에 따라 먼저 처리되는 집합이 결정되어짐
\-조인방식에 따라서 달라 질수는 있지만 어떤 절차로 수행되더라도 결과는 동일하다.
반복연결
\-데이터의 연결 방식은 보장 받는다.

전체조인방식의 조인

\-테이블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;

  • ORDER BY 절 때문에 전체범위를 처리한다
    (1) SELECT FLD1, .................., FLDn
    FROM TAB1
    WHERE FLD1='10'
    ORDER BY FLD2;
  • 데이터의 접속을 위해 개별적인 SQL을 수행
  • 테이블2 접근하는 횟수가 줄어들었음
    (2) SELECT COL1, ................., COLn
    FROM TAB2
    WHERE KEY2=:a.KEY1;
    \-테이블전체를 모두 연결해야 하는 상황이라면 처음 소개했던 그림에서 알수있듯이 조인방식이 더유리함

 

하나의 인라인뷰로의 표현방법

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차 가공을 한 수 운반단위만큼 추출시키고 다음 요구가 있을때까지 일단멈추게된다.
부분범위 처리 : 드라이빙 조건을 만족하는 범위를 차례로 스캔하면서 체크조건을 검증하여 성공한 건을 바로 운반단위로 보낸다.
운반단위가 채워지면 수행을 멈추고 그결과를 추출시킨다.
빠른 수행속도를 보장 받을수 있다

문서에 대하여

  • 이 문서는 오라클클럽 대용량 데이터베이스 스터디 모임에서 작성하였습니다.
  • {*}이 문서의 내용은 이화식님의 새로쓴 대용량 데이터베이스 솔루션을 참고했습니다.*
  • 이 문서를 다른 블로그나 홈페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^\^
"구루비 데이터베이스 스터디모임" 에서 2008년에 "새로쓴 대용량 데이터베이스 솔루션1" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/2587

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입