- 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 Join와 Hash Join이다.
Hash Join은 Sort Merge Join보다 일반적으로 우수하지만, Join 대상 테이블이 Join Key 컬럼으로 정렬되어 있는 경우 Sort Merge Join가 더 우수할 수 있다.
⭐️ EXISTS 절 실행계획
EXISTS절은 실행계획상에 주로 SEMI JOIN으로 나타난다.
NL, Sort Merge, Hash가 모두 나타날 수 있지만 NL SEMI JOIN이 나타날 가능성이 가장 크다.