소트 머지 조인
조인 컬럼에 인덱스가 없을 때, 대량 데이터 조인이어서 인덱스가 효과적이지 않을 때, 옵티마이저는 NL 조인 대신 소트 머지 조인이나 해시 조인을 선택한다
특징 1: 인덱스 X
특징 2: 대량 데이터
특징 3: 양쪽 집합을 개별적으로 읽고 나서 조인을 시작
특징 4: 스캔 위주의 액세스 방식을 사용 (모든 처리가 스캔 방식은 X)
4.2.1 SGA vs PGA
- 오라클 서버 프로세스는 SGA에 공유된 데이터를 읽고 쓰면서, 동시에 자신 만의 고유 메모리 영역을 갖는다
- PGA (Process/Program/Private Global Area)라고 불린다
- 프로세스에 종속적인 고유 데이터를 저장하는 용도
- 할당받은 PGA 공간이 작아 데이터를 모두 저장할 수 없을 때 Temp 테이블 스페이스를 이용한다
- Temp는 디스크라 속도가 매우 느리기 때문에 PGA의 공간 크기가 중요하다
- PGA는 다른 프로세스와 공유하지 않는 독립적인 메모리 공간이므로 래치 메커니즘이 불필요하다
- 같은 양의 데이터를 읽더라고 SGA 버퍼캐시에서 읽을 때 보다 훨씬 빠르다
4.2.2 기본 메커니즘
소트 머지 조인 (Sort Merge Join)은 이름이 의미하는 것처럼 두 단계로 진행된다
- 소트 단계 : 양쪽 집합을 조인 컬럼 기준으로 정렬한다
- 머지 단계 : 정렬한 양쪽 집합을 서로 머지(Merge)한다
소트 머지 조인은 인덱스를 사용하지 않기 때문에 정렬을 따로 해줘야한다(order by)
- Sort Area에 저장한 데이터 자체가 인덱스 역할을 하므로 소트 머지 조인은 조인 컬럼에 인덱스가 없어도 사용할 수 있는 조인 방식이다
- 조인 컬럼에 인덱스가 있어도 NL 조인은 대량 데이터를 조인할 때 불리하므로 소트 머지 조인을 사용할 수 있다
4.2.3 소트 머지 조인이 빠른 이유
소트머지조인은 Sort Area에 미리 정렬해 둔 자료구조를 이용한다는 점만 다를 뿐 조인 프로세싱 자체는 ML 조인과 같다
- NL 조인(인덱스 조인)
- 조인 과정에서 액세스하는 모든 블록을 랜덤 액세스 방식으로 DB 버퍼캐시를 경유해서 읽는다
- 버퍼캐시에서 찾지 못한 블럭은 디스크에서 읽어 들인다
- 그렇기 때문에 대량 데이터 조인에 NL 조인이 불리하다
- 소트 머지 조인
- 양쪽 테이블로부터 조인 대상 집합을 '일괄적으로' 읽어 PGA or Temp에 저장한 후 조인한다
- 래치 획득 과정이 없기 때문에 대량 데이터 조인이 대량 데이터 조인에 유리하다
4.2.4 소트 머지 조인의 주용도
- 소트 머지 조인보다 해시 조인이 더 빨라서 해시 조인을 더 많이 사용한다
- 소트 머지 조인은 아래와 같은 상황에 주로 사용된다
- 조인 조건식이 등치(=) 조건이 아닌 대량 데이터 조인
- 조인 조건식이 아예 없는 조인 (Cross join, 카테시안 곱)
'SQL 튜닝 > Ch04 조인 튜닝' 카테고리의 다른 글
4.4 서브쿼리 조인 (0) | 2024.11.12 |
---|---|
4.3 해시 조인 (0) | 2024.11.12 |
4.1 NL 조인 (0) | 2024.11.12 |