데지덤

  1. 데이터관련 직무와 자격
    1. 데이터베이스 직무

    2. 데이터베이스 자격

  2. 데이터관련 학습방법
    1. 데이터베이스 개론 학습

    2. DBMS 학습

    3. 읽어볼만한 DB책

  3. 최신동향과 유명한 Things
    1. DB최신동향

    2. 데이터로 유명한 Things

  4. 데이터베이스 개념
    1. 데이터베이스 개념

    2. DBMS

    3. 데이터베이스 개발과운영

  5. 데이터베이스 설계(1/2)
    1. 데이터표준

    2. 데이터모델링

    3. 데이터모델 디자인패턴

  6. 데이터베이스 설계(2/2)
    1. 프로세스및상관모델링

    2. 정규화

    3. 반(역)정규화

    4. DB물리설계

  7. 인덱싱과 DB프로그래밍
    1. 인덱스와 해싱

    2. 관계연산

    3. DB언어

    4. SQL

    5. 데이터베이스 미들웨어

  8. 데이터베이스 운영
    1. 트랜잭션

    2. 병렬처리

    3. 데이터베이스 복구

    4. 데이터베이스 성능

    5. 병행제어(동시성제어)

  9. 분석계 및 빅데이터기술
    1. 데이터웨어하우스

    2. 데이터마이닝

    3. 빅데이터기술

  10. 데이터거버넌스
    1. 데이터거버넌스

    2. 데이터베이스 감리/진단

  11. 데이터베이스 종류와 보안
    1. 데이터베이스 종류

    2. 데이터베이스 보안

  12. DBMS
    1. 오라클

    2. SQL Server

    3. DB2

    4. Sybase

    5. Altibase

Nested,Sort,Hash 조인

개념
-두 릴레이션으로부터 관련된 투플들을 결합하여 하나의 투플로 만드는 가장 데표적인 데이터 연결 방법 -두 개 이상의 릴레이션을 갖는 관계 데이터 베이스에 대해서 릴레이션들 간의 관계를 처리할 수 있게 함 -하나의 SQL 명령문에 의해 여러 테이블에 저장된 데이터를 한번에 조회할 수 있는 기능.

1. 릴레이션 간의 관계 처리를 위한 조인 연산의 개요

  가. 조인(JOIN) 연산의 정의

두 릴레이션으로부터 관련된 투플들을 결합하여 하나의 투플로 만드는 가장 데표적인 데이터 연결 방법

두 개 이상의 릴레이션을 갖는 관계 데이터 베이스에 대해서 릴레이션들 간의 관계를 처리할 수 있게 함

하나의 SQL 명령문에 의해 여러 테이블에 저장된 데이터를 한번에 조회할 수 있는 기능.

 

 

  나. 조인연산의 특성

질의 처리에서 가장 시간이 많이 소요되는 연산 중의 하나

어떤 조인 방향이나 조인 방법을 선택할 지라도 결과 집합은 동일하나, 조인하고자 하는 두 집합의 데이터 상황에 따라 조인방향, 조인 방법에 따른 수행 속도의 영향이 큼

  다. 조인연산의 예

  • 사례 : 각 부서의 관리자의 이름을 알고 싶은 경우를 가정
  • 방법 :
  • 관리자의 이름을 알기 위해서는 각 부서의 투플들을 부서 투플에있는 메니저사원번호(MGRSSN)값과 일치하는 사원번호(SSN)값을 갖는 사원 투플들과 결합해야 함
  • 부서(DEP) 릴레이션과 사원(EMP) 릴레이션의 조인 연산을 먼저 수행하고, 조인 결과에 대하여 필요한 애트리뷰트(속성)들을 구함
  • 조인연산 수행
  • 관계대수 : DEP_MGR <- DEP  MGRSSN=SSN EMP
  •  SQL문 : Select DNAME, ENAME

From DEP, EMP

where DEPT.MGRSSN=EMP.SSN

 

 

 

2. 조인 연산 방법(알고리즘)

방 법

설 명

중첩 반복 조인

(Nested Loop join)

선행테이블(드라이빙 테이블)의 처리범위를 하나씩 액세스하면서 그 추출된 값으로 연결할 테이블(후행 테이블)을 조인하는 방식

색인된 중첩 반복 조인, 단일 반복 조인

(single loop join)

-후행(Driven) 테이블의 조인 속성에 인덱스가 존재할 경우 사용

- 선행 테이블의 각 레코드들에 대하여 후행 테이블의 인덱스 접근 구조를 사용하여 직접 검색 후 조인하는 방식

정렬 합병 조인

(Sort Merge join)

양쪽 테이블의 처리범위를 각자 액세스하여 정렬한 결과를 차례로 scan하면서 연결고리의 조건으로 merge해 가는 방식

해시 조인

(Hash join)

해시(Hash)함수를 사용하여 두 테이블의 자료를 결합하는 조인 방식

 

※ 아래의 조인 알고리즘들은 R A=B S 를 기준으로 설명함

( 릴레이션 R과 S의 각 튜플들이 R의 A애트리뷰트와, S의 B 애트리뷰트 값이 일치하면 결합)

 

3. 중첩 반복 조인(Nested Loop Join)

  가. Nested Loop Join 알고리즘

- 2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 Row를 결합하여 원하는 결과를 추출.

- R(외부, 선행 테이블)의 각각의 레코드에 대해 S(내부, 후행 테이블)의 모든 레코드를 검색하여, 두 레코드가 조인 조건(A=B)을 만족하는지 확인하여 만족하면 조인하는 방법

    

  나. 색인된 중첩 반복 조인(=단일 반복 조인, single loop join) 알고리즘

         - S(내부 테이블)의 B에 인덱스가 존재할 경우 사용

- R의 각 레코드들에 대하여 S의 인덱스 접근 구조를 사용하여 S의 레코드들 중에서 조인조건을 만족하는 레코드를 직접 검색

  다. 사용법 및 사용예제

    힌트: /*+ USE_NL(A B) */

    select /*+ use_nl(b,a) */ a.dname, b.ename, b.sal

    from emp b, dept a

    where a.loc = 'NEW YORK'

    and b.deptno = a.deptno

  라. Nested Loop의 특징

    - 주로 좁은 범위에 유리

    - 순차적으로 처리하며, Random Access 위주

    - 후행(Driven) 테이블에는 조인을 위한 인덱스가 생성되어 있어야 함

    - 실행속도 = 선행 테이블 사이즈 * 후행 테이블 접근횟수

  마. Nested Loop사용 시 주의사항

    - 데이터를 랜덤으로 액세스하기 때문에 결과 집합이 많으면 수행속도가 저하됨

    - 선행(Driving) 테이블의 크기가 작거나, Where절 조건을 통해 결과 집합을 제한할 수 있어야 함

    - 조인 연결고리 인덱스가 없거나, 조인 집합을 구성하는 검색조건이 조인 범위를 줄여주지 못할 경우 비효율적임

 

- Loop 개수를 줄이기 위해 조인에 참여하는 테이블 중 Row수가 적은 쪽을 Driving으로 설정하고, inner 테이블의 연결고리를 결합인덱스를 이용해 최적화함

 

  바. Nested Loop사용 예

 

 

 

 

4. 정렬 합병 조인(Sort Merge Join)

  가. Sort Merge Join 알고리즘

- R과 S의 레코드들이 각각 조인 애트리뷰트 A, .B 값에 따라 물리적으로 정렬되어 있는 경우, 두 파일을 모두를 조인 애트리뷰트의 순서에 따라 동시에 스캔하면서 A, B 값이 동일한 레코드를 검색

- 정렬되어 있지 않은 경우는 우선 외부 정렬을 사용하여 정렬 후 조인

-조인의 대상범위가 넓을 때 발생하는 랜덤 액세스를 줄이기 위한 경우나 연결고리에 마땅한 인덱스가 존재하지 않을 때 해결하기 위한 대안

 

  나. 사용법 및 사용예제

     힌트: /* USE_MERGE(A B) */

select /*+ use_merge(a b) */a.dname, b.empno, b.ename
from   dept a,emp b
where  a.deptno = b.deptno
and    b.sal > 1000 ;

  다. Sort Merge Join의 특징

- 연결을 위해 랜덤 액세스를 하지 않고 스캔을 하면서 이를 수행

- 정렬을 위한 영역(Sort Area Size)에 따라 효율에 큰 차이가 남

- 조인 연결고리의 비교 연산자가 범위 연산(‘>’,’< ‘)인 경우 Nested Loop 조인보다 유리

  라. Sort Merge Join사용시 주의사항

- 두 결과집합의 크기가 차이가 많이 나는 경우에는 비효율적

- Sorting 메모리에 위치하는 대상은 join key뿐만 아니라 Select list도 포함되므로 필요한 select 항목 제거

  마. Sort Merge Join사용 예

 

3. 해시 조인(Hash Join)

  가. Hash Join 알고리즘

- 해싱 함수(Hashing Function) 기법을 활용하여 조인을 수행하는 방식으로 해싱 함수는 직접적인 연결을 담당하는 것이 아니라 연결될 대상을 특정 지역(partition)에 모아두는 역할만을 담당함

- R의 애트리뷰트 A와 S의 애트리뷰트 B를 해시 키로 하고, 동일한 해시 함수를 사용하여 해시

- 1단계(분할 단계, partitioning phase):  더 적은 수의 레코드를 가진 화일(R )의 레코드들을 해시 파일 버켓들로 해시

- 2단계(조사 단계, probing Phase): 다른 파일(S)의 각 레코드를 해시하여 R에서 동일한 해시 주소를 갖는 버켓 내의 레코드들이 실제로 조인 조건을 만족하면 두 레코드를 결합

 

  나. 사용법 및 사용예제

    힌트: /*+ USE_HASH(A B) */

select /*+ use_hash(a b) */ a.dname, b.empno, b.ename
from dept a, emp b
where a.deptno = b.deptno
and a.deptno between 10 and 20;

 

  다. Hash Join의 특징

  1. Nested Loop 조인과 Sort Merge 조인의 문제점을 해결
  2.  대용량 처리의 선결조건인 랜덤 액세스와 정렬에 대한 부담을 해결할 수 있는 대안으로 등장
  3. Hash 조인만을 이용하는 것보다 parallel processing을 이용한 hash 조인은 대용량 데이터를 처리하기 위한 최적의 솔루션 제공
  4. 2개의 조인 테이블 중 small rowset을 가지고 hash_area_size에 지정된 메모리 내에서 hash table 생성
  5. Hash bucket이 조인집합에 구성되어 Hash 함수 결과를 저장하여야 하는데, 이러한 처리에 많은 메모리와 CPU자원이 소모됨
  6. CBO(Cost Based Optimizer) 모드에서 옵티마이저가 판단가능하며, 테이블의 통계정보가 있어야 함
  7. Hash table 생성 후 Nested Loop처럼 순차적인 처리 형태로 수행함

  라. Hash Join사용시 주의사항

  1. 대용량 데이터 처리에서는 상당히 큰 hash area를 필요로 함으로, 메모리의 지나친 사용으로 오버헤드 발생 가능성
  2. 연결조건 연산자가 ‘=’인 동치조인인 경우에만 가능

 

  마. Hash Join정리

    1) 수행순서

           - 두 테이블을 스캔하여 사이즈가 작은 테이블을 선행 테이블로 결정

           - 선행 테이블을 이용하여 해쉬 테이블을 구성한다(Build Input)

           - 후행 테이블은 해쉬 값을 이용하여 선행 테이블과 조인한다(Prove Input)

     2) Build Input 크기

           -  Hash Area 만으로 Hash Table 생성이 불충분하다면 Hash Table Overflow가 발생

             내Hash Area 사이즈를 증가 필요함

     3) 이용

           - 대용량 데이터 엑세스, 배치처리, 전체 테이블을 조인할 때 유리하다

           - 양쪽 테이블의 조건으로 각각 범위를 줄일 수 있을 때 유리하다

           - 병행 처리로 수행속도 향상이 가능하다

           - Hash Area 사이즈 조정으로 수행속도 향상이 가능하다

 

4. 조인 연산 비교

  가. Nested Loop와 Hash Joi의 비교

구분

Nested loop join

Hash join

대량의 범위

인덱스를 랜덤 액세스에 걸리는 부하가 가장 큰 문제점으로, 최악의 경우 하나의 ROW를 액세스하기 위해 Block단위로 하나하나 액세스를 해야 함.

적은 집합에 대하여 먼저 해시 값에 따른 Hash Bucket정보를 구성한 후 큰 집합을 읽어 해시 함수를 적용하여 Hash Bucket에 담기 전에 먼저 호가인해 볼 수 있기 때문에 해시조인이 효율적인 수행이 가능

대량의 자료

다량의 랜덤 액세스 수행으로 인해 수행 속도가 저하

대용량 처리의 선결조건인 ‘랜덤 액세스’와 ‘정렬’에 대한 문제 개선과 H/W의 성능 개선을 통해 각 조인 집합을 한번 스캔하여 처리하기 때문에 디스크 액세스 면에서 훨씬 효율적

  나. sort merge와 Hash join의 비교

구 분

Sort merge join

Hash join

조인이 되는 두 테이블의 크기가 다를 경우

조인이 되는 두 테이블의 크기가 다르다면 정렬되는 시간이 동일하지 않아 시간에 대한 손실이 발생

조인에 대한 알고리즘을 구현하기 때문에 두 집합의 크기가 차이가 나도 대기 시간이 발생치 않음

대용량 데이터의 경우

정렬에 대한 부담 때문에 sort merge조인은 제 기능을 발휘하지 못하는 경우가 발생. 즉 메모리 내의 지정한 정렬 영역보다 정렬할 크기가 지나치게 큰 경우 정렬할 범위가 넓어질수록 효율성을 하락

대용량 처리의 선결 조건인 ‘랜덤 액세스’와 ‘정렬’에 대한 문제 개선과 H/W의 성능 개선을 통해 각 조인 집합을 한 번 스캔하여 처리하기 때문에 디스크 액세스 면에서도 훨씬 효율적

댓글