메뉴 건너뛰기

bysql.net

제3절_조인_수행_원리

2011.11.10 08:01

노랑배 조회 수:6393

제 3절 조인 수행 원리


  • 조인이란?
    • 두 개 이상의 테이블을 하나의 집합으로 만드는 연산.
    • SQL문에서 FROM 절에 두 개 이상의 테이블이 나열될 경우 조인이 수행.
    • 조인 연산은 두 테이블 사이에서 수행된다.
  • 조인의 종류
    • NL Join, Sort Merge Join, Hash Join



1. NL Join

  • NL Join 정의
    • 두개의 테이블을 중첩된 반복문처럼 조인을 수행한다.
    • 반복문 외부(처음 테이블)에 있는 테이블을 선행테이블 또는 외부 테이블
    • 반복문 내부(두번째 테이블)에 있는 테이블을 후행테이블 또는 내부 테이블 이라고 부른다.

# 조인을 반복문으로 표현하면 아래와 같다.


for 선행 테이블 읽음            --- 다른말로---> 외부 테이블(Outer Table)

       for 후행 테이블 읽음     ---다른말로---> 내부 테이블(Inner Table)

              (선행 테이블과 후행 테이블 조인)

  • NL Join 중요사항
    • 결과 행의 수가 적은 테이블을 선행 테이블로 선택한다.
      (왜냐하면 선행 결과값이 많을 경우 일량이 늘어날 수 있기 때문)

  • NL Join 수행 방식


1. 선행 테이블에서 조건에 맞는 값을 찾음

2. 선행 테이블의 조인 키를 가지고 후행 테이블 조인 키 확인

3. 후행 테이블의 인덱스에 선행 테이블의 조인 키 존재 확인

4. 인덱스에서 추출한 레코드 식별자를 이용하여 후행 테이블 액세스

5 ~ 11 앞의 작업을 반복 수행함



2. Sort Merge Join

  • Sort Merge Join 정의
    • Sort Merge Join은 조인 칼럼을 기준으로 데이터를 정렬하여 조인한다.


  • Sort Merge Join 특징
    • 넓은 범위의 데이터를 처리할 때 주로 이용.
    • 정렬 데이터가 많을 경우 성능이 떨어질 수 있다.(디스크 I/O로 인한 부하 발생)
    • 비동등 조인에 대해서도 조인이 가능
    • 인덱스를 사용하지 않아 인덱스가 존재하지 않을 경우에 사용할 수 있다.

  • Sort Merge Join 수행 방식
1. 선행 테이블에서 조건에 맞는 행을 찾음.
2. 선행 테이블의 조인 키를 기준으로 정렬 작업 수행.
1 ~ 2번 작업을 반복 수행
3. 후행 테이블에서 조건에 맞는 행을 찾음.
4. 후행 테이블의 조인 키를 기준으로 정렬 작업 수행.
3 ~ 4번 작업을 반복 수행
5. 정렬된 결과를 이용하여 조인 수행 -> 결과값은 버퍼에 저장



3. Hash Join

  • Hash Join 정의
    • 해싱 기법을 이용하여 조인 수행

  • Hash Join 특징
    • NL Join의 랜던 액세스 문제점과 Sort Merge Join의 정렬 작업의 부담을 해결 위한 대안으로 사용
    • 조인 칼럼의 인데긋가 존재하지 않을 경우에도 사용할 수 있다.
    • "="로 수행하는 조인 즉, 동등 조인만 가능(왜냐하면 해쉬함수 이용으로..)
    • 해쉬 테이블의 크기가 메모리에 적재할 수 있는 크기보다 커지면 디스트 사용(I/O에 따른 부하 가중)
      즉, 해쉬 조인을 할때 결과 행의 수가 적은 테이블을 선행 테이블로 사용한다.

  • Hash Join 수행 방식

1. 선행 테이블에서 조건에 만족하는 행을 찾음.

2. 선행 테이블의 조인 키를 기준으로 해쉬 함수를 적용하여 해쉬 테이블 생성

1 ~ 2번 작업을 선행 테이블의 조건 만큼 반복

3. 후행 테이블에서 조건에 만족하는 행을 찾음

4. 후행 테이블의 조인 키를 기준으로 해쉬 함수를 적용하여 해당 버킷을 찾음

5. 조인에 성공하면 추출버퍼에 저장

3 ~ 5번 작업을 후행 테이블의 조건 만큼 수행




번호 제목 글쓴이 날짜 조회 수
47 5 연습문제 RYUM 2014.08.07 9547
46 5 연습문제 RYUM 2014.08.07 7519
45 5_장_요약 balto 2011.11.16 6994
44 SQL 문제 [2] file balto 2011.11.15 26831
» 제3절_조인_수행_원리 노랑배 2011.11.10 6393
42 제1절_옵티마이저와_실행계획 실천하자 2011.11.08 5289
41 제1절 옵티마이저와 실행계획 실천하자 2011.11.07 6006
40 4_연습문제 monsterRachel 2011.11.03 10850
39 4_장_요약 suspace 2011.11.03 6437
38 제6절_윈도우_함수(WINDOW_FUNCTION) suspace 2011.10.27 20546
37 제8절_절차형_SQL monsterRachel 2011.10.27 8695
36 제7절_DCL(DATA_CONTROL_LANGUAGE) file DB지기 2011.10.26 8533
35 제2절_인덱스_기본4 balto 2011.10.24 7715
34 .. balto 2011.10.14 4847
33 제1절_표준_조인(STANDARD_JOIN) 노랑배 2011.10.13 15670
32 3_연습문제 DB지기 2011.10.13 7092
31 3_장_요약 file DB지기 2011.10.13 6081
30 제3절_계층형_질의와_셀프_조인 [1] 실천하자 2011.10.12 11495
29 제2절_집합_연산자(SET_OPERATOR) [1] 실천하자 2011.10.11 13878
28 제5절_그룹_함수(GROUP_FUNCTION) file balto 2011.10.08 11436