JOIN

김기태·2021년 12월 29일
0

NL (Nested Loops) 조인

  • 이중 for문과 같은 원리

  • 하나의 Table을 기준으로 각 row를 추출 할 때 마다 순차적으로 상대 Table의 연관된 모든 row들을 조인에 의해 추출

Outer Table

  • 소량의 데이터를 가진 Table이 Outer Table로 설정되는 것이 성능에 유리

Inner Table

  • JOIN Column이 Index되어 있지 않으면 전부 full scan해야 하기 때문에 엄청난 비효율

  • JOIN이 계속 일어나기 때문에 대량의 Table에 적절하지 않다

SM (Sort Merge) 조인

  • JOIN 컬럼을 기준으로 sorting시킨 후 JOIN

  • Inner Table쪽에 적절한 인덱스가 없어서 Nested Loop JOIN 쓰기에 너무 비효율 적일 때 사용

  • Equi JOIN이 아니라 범위 JOIN을 하는 경우에도 적절

  • Table Random Access가 일어나지 않고 sorting작업이 PGA영역에서 수행되기 때문에 경합이 발생하지 않아서 성능에 유리한

HASH JOIN

  • 배치에서 쓰면 좋은 수행 원리

  • 대용량 Table을 JOIN할 때 사용하면 좋다

  • 그룹 Table을 Build Input으로 삼아서 HASH 영역에 저장

  • HASH영역은 PGA 영역에 있기 때문에 처리속도가 빠르다

  • Key 컬럼에 중복값이 없을수록 성능에 유리하다

  • Equi JOIN만 가능하다

  • Sort Merge JOIN처럼 Random Access부하가 없다

  • HASH 영역의 사이즈가 정해져 있기 때문에 들어가는 Table의 크기가 충분히 작아야 성능에 유리

  • Table의 용량이 HASH사이즈를 초과하면 디스크 영역을 사용하기 때문에 성능에 매우 불리

  • 수행 빈도가 높은 OLTP환경에서 HASH JOIN으로 풀리게 되면 오히려 CPU나 메모리의 사용량이 늘어서 성능에 안좋아 질 수 있다.

Equi JOIN (등가 조인)

  • 두 테이블의 공통된 데이터를 갖는 칼럼을 연결하여 결과를 검색하는 방법
  • 조인 조건이 정확히 일치하는 경우에 사용 (PK(기본키) 와 FK(외래키) 를 사용한 조인)

  • 조인 조건에 ' = ' 를 이용하는 조인

  • 매칭이 안되는 부분은 누락이 돼버리고 나머지만 JOIN

Non-Equi JOIN (비등가 조인)

  • 테이블 간의 공통 컬럼이 없지만 일정 범위의 조건을 만족할 때
  • 비교 연산자를 이용한 조인

SELF JOIN

  • SELF JOIN은 1개의 테이블(자기 자신의 테이블)에서 조인하는 방법
  • 1개의 테이블에서 조인하기 때문에 별칭을 사용해야 원하는 데이터를 조회

INNER JOIN

  • INNER JOIN은 Equi JOIN과 동일한 목적으로 사용되며 가장 많이 사용되는 JOIN 방법
  • INNER JOIN을 사용할 때는 공통된 컬럼을 ON 절 뒤에다가 명시
profile
김개발

0개의 댓글