데이터베이스 주요 개념 2. Nested loop, Sort Merge, Hash join

2021. 6. 10. 18:16·OLD/IT 용어 사전
반응형

 

 

 

 

1. Nested Loop Join


바깥 테이블의 처리 범위를 하나씩 엑세스하면서 그 추출된 값으로 안쪽 테이블을 조인하는 방식

 

1) 특징 및 장점

  • 순차적으로 처리
  • 바깥 테이블과 일치하는 값을 안쪽 테이블에서 찾아야 하므로 테이블의 해당 열에 인덱스 필요
  • 메모리 사용량은 가장 적음
  • 선행 테이블의 처리 범위가 전체 일의 양을 결정
  • 좁은 범위에서 유리한 성능을 보여줌
  • 순차적으로 처리하며, Random Access 위주
  • 후행 테이블에는 조인을 위한 인덱스 생성 필요
  • 실행속도 = 선행 테이블 사이즈 * 후행 테이블 접근 횟수

 

2) 단점 및 주의사항

  • 데이터를 랜덤으로 엑세스하므로 결과 집합이 많으면 속도가 느려짐
  • join index 가 없거나, 조인 집합을 구성하는 검색 조건이 조인 범위를 줄이지 못할 경우 비효율

 

 

3) 적용 방법

 

각 DB 마다 적용하는 방법은 다르기 때문에 자주 사용하는 부분만 추후 재사용을 위해 기록해둔다.

 

- Ms SQL

SELECT *
FROM Test.testdata1 AS a
     INNER LOOP JOIN Test.testdata2 AS b ON a.test1ID = b.test1ID

 

- MySQL

 SELECT /*+ USE_NL ( TABLE_NAME, TABLE_NAME2 ... ) */ COLUMN ..

 

 

 

 

 

2. Sort Merge Join


외부 또는 내부 테이블에서 조거에 만족하는 레코드를 검색한 후, 조인 키를 기준으로 정렬작업을 수행하는 Join

 

1) 특징 및 장점

  • 정렬한 결과를 차례로 스캔하여 연결고리 조건으로 Merge
  • Loop Join 보다 훨씬 빨라지는 경우 있음
  • 랜덤 엑세스가 줄어들어 시스템 부하 감소
  • 조인 연산자가  '=' 이 아닌 경우 nested loop 조인보다 유리한 경우 많음
  • 테이블의 스캔수는 한번만 이루어짐
  • 양 테이블 모두 조인키에 의해 정렬되어야 함
  •  

 

 

2) 단점 및 주의사항

  • 일반적으로 Loop Join 보다는 사용 빈도가 적음
  • 정렬을 위한 영역(Sort Area Size) 에 따라 효율에 큰 차이 발생
  • 두 결과집합의 크기가 차이가 많이 나는 경우 비효율
  • 정렬에 따른 부담 발생(메모리 사용 증가)

 

 

3) 적용방법

- MSSQL

SELECT *
FROM Test.testdata1 AS a
     INNER MERGE JOIN Test.testdata2 AS b ON a.test1ID = b.test1ID

-MySQL

 SELECT /*+ USE_MERGE ( TABLE_NAME, TABLE_NAME2 .. ) */ COLUMN ..

 

 

 

 

 

3. Hash Join 


외부 테이블 전체를 읽어 결합 키를 기준으로 해시 테이블을 만들어 연결될 대상을 특정 지역(Partition) 에 모아두는 역할을 담당하는 Join

 

1) 특징 및 장점

  • 해시값을 이용하여 테이블을 조인
  • 부하가 많이 발생하는 sort merge 조인을 보완하기 위한 방법으로 sort 대신 hash 를 이용
  • 랜덤 엑세스와 정렬에 대한 부담을 해결할 수 있음
  • 대용량 데이터 처리를 위한 최적의 솔루션
  • 해시 테이블 생성 후, nested loop 처럼 순차적으로 처리 수행
  • 조인의 결과는 정렬하지 않은 상태로 출력

 

2) 단점

  • 대용량 데이터 처리시 큰 hash area 필요함으로 메모리의 지나친 사용으로 오버헤드 가능성
  • 연결조인 연산자가 '=' 인 경우에만 가능

 

 

 

3) 적용 방법

 

- MSSQL

SELECT *
FROM Test.testdata1 AS a
     INNER HASH JOIN Test.testdata2 AS b ON a.test1ID = b.test1ID

- MySQL

SELECT /*+ USE_HASH ( TABLE_NAME, TABGLE_NAME2 ... ) */ COLUMN ..

 

 

 

 

 

 

 

 

4. 참고링크


https://needjarvis.tistory.com/162

 

Nested Loop, Sort-Merge, Hash Join 조인연산

조인연산(Join Operation) 이란? - SQL 명령문에 의해서 여러 테이블에 저장된 데이터를 한번에 조회할 수 있게 하는 DBMS의 기능 - 두 집합(테이블) 간의 곱으로 데이터를 연결하는 가장 대표적인 데이

needjarvis.tistory.com

https://blog.sonim1.com/108

 

[MSSQL] JOIN의 방식 - Nested loop Join / Merge Join / Hash Join

Join의 방식에 관하여 Join의 종류는 5가지가 있습니다. INNER Join OUTER Join CROSS Join FULL OUTER Join SELF Join Join의 방식은 3가지가 있습니다. Nested Loop Join - 중첩반복 Merge Join - 정렬병합 Has..

blog.sonim1.com

https://mozi.tistory.com/168

 

[MySQL] NL, Sort Merge, Hash Join 최적의 결합 방법 선택하기

테이블을 조인 할 때, Nested Loops, Sort Merge, Hash Join 결합을 많이 사용합니다. Nested Loops 외부 테이블(Outer Table)에서 조건에 만족하는 레코드를 검색한 후, 결합 조건에 일치하는 레코드를 내부..

mozi.tistory.com

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'OLD > IT 용어 사전' 카테고리의 다른 글

Provisioning 프로비저닝  (0) 2022.06.23
SCD 테이블  (0) 2022.06.06
4. MVCC (Multi-Version Concurrency Control) 다중 버전 동시성 제어  (0) 2022.03.30
[용어사전] Catalyst optimizer 란?  (0) 2022.01.16
데이터 베이스 주요 개념 01. 샤딩, 파티셔닝  (0) 2020.06.22
'OLD/IT 용어 사전' 카테고리의 다른 글
  • SCD 테이블
  • 4. MVCC (Multi-Version Concurrency Control) 다중 버전 동시성 제어
  • [용어사전] Catalyst optimizer 란?
  • 데이터 베이스 주요 개념 01. 샤딩, 파티셔닝
쟈누
쟈누
Ad astra per aspera
    반응형
  • 쟈누
    쟈누의 기록공간
    쟈누
  • 전체
    오늘
    어제
    • 분류 전체보기 (444)
      • AWS (31)
        • Glue (4)
        • S3 (1)
      • 클라우드 (0)
      • Data Engineering (37)
        • GitHub (10)
        • NiFi (11)
        • Spark (10)
        • Snowflake (0)
        • 머신러닝, AI (6)
      • 언어 (118)
        • 데이터 베이스 (42)
        • JAVA (9)
        • Python (34)
        • Java Script (15)
        • Linux (18)
      • 프로젝트, 인강 그리고 책 (30)
        • Spotify Project (7)
        • RASA chatbot Project (9)
        • Naver shopping Project (6)
        • 빅데이터를 지탱하는 기술 (8)
      • OLD (56)
        • IT 용어 사전 (13)
        • Front End (12)
        • Back End (31)
      • Error code 모음 (165)
        • 1. SQL errors (17)
        • 2. Hadoop errors (20)
        • 3. Linux Errors (14)
        • 4. Python errors (33)
        • 5. JAVA, Spring errors (41)
        • 6. Jav Script errors (10)
        • 7. Dev Tools errors (9)
        • 8. Git errors (8)
        • 9. Jenkins Errors (4)
        • 10. airflow Errors (2)
        • 11. Aws errors (7)
      • 개인 (1)
        • 책 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 블로그 관리
    • 글쓰기
  • 링크

  • 공지사항

    • 간단한 블로그 소개
  • 인기 글

  • 태그

    json
    node
    SQL
    설치
    AWS
    파이썬
    자바
    MySQL
    리눅스
    API
    Python
    error
    Git
    에러
    install
    linux
    java
    python error
    NiFi
    Spring
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
쟈누
데이터베이스 주요 개념 2. Nested loop, Sort Merge, Hash join
상단으로

티스토리툴바