시그마 삽질==six 시그마

'친절한 SQL 튜닝' 요약정리 5탄: 조인 튜닝(소트 머지 조인) 본문

프로그래밍/Database

'친절한 SQL 튜닝' 요약정리 5탄: 조인 튜닝(소트 머지 조인)

Ethan Matthew Hunt 2020. 3. 19. 22:54
(주)디비안 조시형 대표님의  '친절한 SQL 튜닝의 바이블'  

구입하시길 강력 추천드립니다.

책 구입을 원하시는분은 요기를 클릭하시면 됩니다.

-저자 소개
現) 주식회사 디비안 대표이사 
오라클 성능 고도화 원리와 해법 1, 2 저자 
국가공인 SQLP, DAP 자격검정 전문위원
한국데이터진흥원과 한국DB산업협의회가 공동 주관하는 제1회 우수DB人상을 수상
인터넷 카페 디비안 포럼(WWW.DBIAN.NET) 운영
前) 이랜드, 인슈넷, 디엠에스랩, 엔코아, 비투엔


하단의 내용은 제가 예전에 읽었던 내용을 요약 정리한 것입니다.

 

 

4.2 소트 머지 조인

 

오라클 서버 프로세스는 SGA에 공유된 데이터를 읽고 쓰면서, 동시에 자신만의 고유 메모리 영역을 갖음

각 오라클 서버 프로세스에 할당된 메모리 영역을 PGA(process/program/private gloabal area)라고 부르며, 프로세스에 종속적인 고유 데이터를 저장하는 용도로 사용함

할당받은 PGA 공간이 작아 데이터를 모두 저장 할 수 없을 때는 Temp 테이블스페이스를 이용함

 

PGA는 다른 프로세스와 공유하지 않은 독립적인 메모리 공간이므로 래치 메커니즘이 불필요

따라서 같은 양의 데이터를 읽더라도 SGA 버퍼캐시에서 읽을때보다 훨씬 빠름

 

1. 소트 단계: 양쪽 집합을 조인 컬럼 기준으로 정렬

2. 머지단계: 정렬한 양쪽 집합을 서로 머지 

 

select e.사원번호, e.사원명, e.입사일자 ,c.고객번호 , c.고객명, c.전화번호, c.최종주문금액

from 사원 e, 고객 c

where c.관리사원번호=e.사원번호

and e.입사일자 >=’19960101’

and e.부서코드 = ‘z123’

and c.최종주문금액 >=20000

 

1)

 

아래 조건에 해당하는 사원 데이터를 읽어 조인컬럼인 사원번호 순으로 정렬 

정렬한 결과집합은 pga 영역에 할당된 sort area에 저장

정렬한 결과집합이 PGA에 담을 수 없을 정도로 크면, temp 테이블스페이스에 저장

 

select e.사원번호, e.사원명, e.

from 사원 e

e.입사일자 >=’19960101’

and e.부서코드 = ‘z123’

 

2)

 

아래 조건에 해당하는 고객 데이터를 읽어 조인컬럼인 관리사원번호 순으로 정렬

정렬한 결과집합이 PGA에 담을 수 없을 정도로 크면, temp 테이블스페이스에 저장

 

 

select c.고객번호 , c.고객명, c.전화번호, c.최종주문금액

from 고객 c

where c.최종주문금액 >=20000

 

3)

 

PGA(또는 temp 테이블스페이스)에 저장한 사원 데이터를 스캔하면서 PGA(또는 temp테이블 스페이스)에 저장한 고객 데이터와 조인

조인하는 과정을 pl/sql 코드로 표현하면 NL조인과 다르지 않음

사원데이터를 기준으로 고객 데이터를 매번 full scan 하지 않음

고객 데이터가 정렬돼 있으므로 조인 대상 레코드가 시작되는 지점을 쉽게 찾을 수 있고 조인에 실패하는 레코드를 만나는 순간 바로 멈출 수 있음

 

 

 

-대량 데이터 조인할 때 소트 머지 조인이 빠른이유

 

nl조인은 단적으로 말해 인덱스를 이용한 조인방식-> 건건이 DB 버퍼캐시를 경유해서 읽음

반면에 소트머지 조인은 양쪽 테이블로부터 조인 대상 집합을 일괄적으로 읽어 PGA 저장후 조인함

 

소트 머지가 사용되는 상황

 

1. 조인 조건식이 등치 조건이 아닌 대량 데이터 조인

2. 조인 조건식이 아예 없는 조인(카테시안 곱)

Comments