[Database] 조인(Join)의 수행 원리

Jay Lee·2022년 11월 28일
0

database

목록 보기
6/6

1. NL(Nested Loops) 조인

조인 수행 절차

하나의 테이블을 기준으로 Full-Scan 하면서 각 row를 추출할 때마다 순차적으로 상대 테이블의 연관된 모든 row들을 조인에 의해 추출한다.

  • 튜닝 포인트
  1. 조인 횟수의 최소화를 위한 조인 순서의 최적화
  2. 조인 조건에 대한 인덱스 구성 및 사용

특징

  1. 인덱스에 의한 Random Access에 기반을 두기 때문에 대량의 데이터 처리 시 불리함.
  2. Driving Table로는 row 수가 적거나, where 절의 조건으로 적절하게 row를 제한할 수 있는 것이어야 함.
    • Driving Table: 우선적으로 데이터를 scan할 테이블(기준 테이블)
  3. Driven 테이블에는 조인 시 사용할 연결 고리 칼럼에 적절한 Index가 있어야 함.
    • 만약 인덱스가 없으면 항상 Full-Scan해야하기 때문

문제점

인덱스 사용에 따른 Random Access로 인한 오버헤드

SM(Sort Merge) 조인

조인 수행 절차

각 테이블로부터 동시에 독립적으로 데이터를 읽어 들인 후, 연결고리 칼럼을 대상으로 정렬 작업을 수행한다. 이후, 정렬이 모두 끝나면 조인을 한다.

사용 용도

  1. Driven Table에 적절한 인덱스가 존재하지 않아 NL Join이 너무 비효율적일 때,
  2. Equal Join이 아닌 범위로 Join을 진행할 때,

튜닝 포인트

  1. 각 테이블로부터 데이터를 빠르게 처리할 수 있도록 한다.
  2. 정렬 작업을 위한 메모리(SORT_AREA_SIZE) 최적화

특징

  1. 연결고리 칼럼에 인덱스가 전혀 없어도 빠른 조인을 수행함
  2. Where 절의 조건으로 조인 범위를 줄이지 못하는 경우에 효율적임
  3. 조인이 되는 두 집합은 모두 정렬되어야 함
  4. Random Access가 일어나지 않고 Sorting 작업이 PGA 영역에서 수행되기 때문에 경합이 발생하지 않음

문제점

정렬 작업으로 인한 오버헤드

Hash 조인


위의 두 조인 방법의 오버헤드를 줄여주는 join 방법

조인 수행 절차

Driving 테이블로 하나를 선택해서 데이터를 먼저 읽어 들인 후, Hashing을 통해 해시 값을 만들어 메모리에 올린다. 다음으로, 조인해야 할 테이블로부터 데이터를 읽어서 hashing을 통해 해시값을 만든다. 이렇게 만든 해시 값을 이용하여 조인을 한다.

사용 용도

  1. 배치작업, 대용량 테이블을 JOIN할 때 이점을 가진다.

튜닝 포인트

  1. Driving 테이블의 선택이 중요하다. (충분히 작아야한다.)
    • Hash 영역의 사이즈를 초과하게 되면 디스크 영역을 사용하기 때문에 비효율적이다.
  2. 각 테이블로부터 데이터를 빨리 처리하도록 한다.
  3. 조인 작업을 위한 메모리(HASH_AREA_SIZE) 최적화

특징

  1. 조인을 위해 만든 해시 값을 저장하기 위해 Hash Bucket이 구성되는데, 이를 위해 많은 메모리와 CPU를 필요로 한다.
  2. 하드웨어 자원이 넉넉한 상황에서는 다른 조인보다 효율적일 수 있지만, 부족한 상황에서는 오히려 다른 조인보다 비효율적이다.
  3. Driven Table의 레코드들을 해싱하여 Driving Table의 레코드에 매칭시켜야 하기 때문에 Equal Join만이 가능하다.

참고자료

https://hoon93.tistory.com/46

profile
Data Engineer

0개의 댓글