[SQLD] 조인 수행 원리

yjkim97·2023년 9월 1일

자격증

목록 보기
22/24
post-thumbnail
  • NL Join (Nested Loop Join)
  • Sort Merge Join
  • Hash Join

Nested Loop Join (NL Join)

Driving o 자연조인 효율 유니크 인덱스

  • 선행 테이블을 엑세스한 후 각 값을 후행 테이블과 조인하는 방식
    ▶️ Driving Table의 조인 데이터 양이 큰 양향을 주는 방식이다. (많을수록 성능 저하)
  • 데이터를 집계하는 업무보다는 OLTP의 목록 처리 업무에 많이 사용된다.
  • 주로 랜덤 액세스 방식으로 데이터를 읽는다.
  • 조인 컬럼에 적당한 인덱스가 있어 자연조인(Natural join)이 효율적일 때 유용하다.
    ▶️ 유니크 인덱스를 활용하여 수행시간이 적게 걸리는 소량 테이블을 온라인 조회하는 경우 유용하다.

OLTP(Online Transaction Processing
온라인 트랜젝션 처리를 말하며, 네트워크 상의 온라인 사용자들의 Database에 대한 일괄 트랜젝션 처리를 의미한다.
흔히 말하는 '트랜젝션 처리'를 OLTP라고 부른다.

  • 온라인 뱅킹, 쇼핑, 주문 입력 또는 메시지 전송 등 동시에 발생하는 다수의 트랜잭션으로 실행하는 데이터 처리 유형

Sort Merge Join (SMJ)

Driving x 적당한 인덱스 x 비동등(NOT-EQUI) ㅇ

  • 조인 컬럼을 기준으로 데이터를 정렬하여 조인을 수행하는 방식
  • 주로 스캔 방식으로 데이터를 읽는다.
    ▶️ NL Join에서 부담이 되던 넓은 범위의 데이터를 처리할 때 이용되던 조인 기법이다.
  • 조인 컬럼에 적당한 인덱스가 없는 경우 사용할 수 있다.

Hash Join

Driving x 자연조인 비효율 인덱스 사용 x only 동등(EQUI)

  • 조인 컬럼의 인덱스가 존재하지 않는 경우에도 사용가능
    ▶️ 조인 컬럼 인덱스가 존재하지 않아 자연조인(Natural join)이 비효율적일 때 유용하다
  • 해시 함수를 이용해서 데이터를 조인하는 방식
  • ⭐️ EQUI(=) 조인 조건에서만 동작한다.
  • 행수가 작은 테이블은 선행 테이블로 선택하는 것이 유리하다.
  • 해시 테이블을 메모리에 생성
  • 선행 테이블 : Build input
  • 후행 테이블 : Prove input

주의

  • Sort Merge Join을 수행하기에 두 테이블이 너무가 정렬부하가 심한 경우 Hash Join이 유용하다.
  • DW 등의 데이터 집계 업무에서 많이 사용되는 기법은 Sort Merge JoinHash Join이다.
  • Hash JoinSort Merge Join보다 일반적으로 우수하지만, Join 대상 테이블이 Join Key 컬럼으로 정렬되어 있는 경우 Sort Merge Join가 더 우수할 수 있다.

⭐️ EXISTS 절 실행계획
EXISTS절은 실행계획상에 주로 SEMI JOIN으로 나타난다.
NL, Sort Merge, Hash가 모두 나타날 수 있지만 NL SEMI JOIN이 나타날 가능성이 가장 크다.

profile
어제는 🐸두꺼비 오늘은 😄YJ

0개의 댓글