(이번 동영상은 다시 보는 게 도움될 듯!)
1. Index range scan
- 사각형 안의 쿼리의 실행계획을 생각해보자.
Select custno, chuldate, custname
From customer Y, chulgot X
WHERE RTRIM(X.CUSTNO) = RTRIM(Y.CUSTNO)
AND X.CHULDATE = ‘941130’
AND Y.NATION = ‘KOR'
[답]
Merge join(sort)
Table Access by rowed chulgot
Index range scan ch_chuldate
Table access by rowed customer
Index range scan cu_nation
2. 액세스 경로의 결정
- 아래 세가지 조건을 고려.
n 상수값을 받을 수 있어야 액세스 자격이 획득 됨
n 어떤 액세스 경로가 가장 유리한가?
n 인덱스 구조가 어떻게 되어 있는가?
3. Join과 Loop-query
Join |
Loop-query |
All_Row(전체범위처리)에 유리 |
Firt_Row(부분범위 처리)에 유리 |
Group by 시 불리 |
Group by 시 유리 |
4. Join 의 종류
- Nested Loop Join
n 순차적 (부분범위 처리 가능)
n 종속적 (먼저 처리되는 테이블의 처리량에 따라 성능 결정)
n Random 액세스 위주 (Single block random I/O가 발생)
n 연결고리 상태에 민감함
n 주로 좁은 범위 처리에 유리
- Sort Merge Join
n 부분범위 처리 불가능 (Sort 종료 후 Join 가능)
n 독립적 (자기의 처리범위만으로 처리량 결정)
n 스캔(Scan) 액세스 위주
n 연결고리 상태에 영향이 없음
n 다량의 데이터 조인 시 유리
- Hah Join
-
5. Join 방법의 결정
- 아래와 같은 순서로 결정.
n Driving 테이블 결정
n 부분범위처리가 가능 à Driving 조건이 좁음 à Nested Loop Join
n 부분범위처리가 가능 à Driving 조건이 넓음 à 체크 조건(야당 ㅋㅋ)이 넓다 à Nested Loop Join
n 부분범위처리가 가능 à Driving 조건이 넓음 à 체크 조건(야당 ㅋㅋ)이 좁다 à Driving과 check 조건 교환 가능 à Nested Loop Join
u Driving과 check 조건 교환 불가능한 경우 : Outer Join!!
n 부분범위처리가 가능 à Driving 조건이 넓음 à 체크 조건(야당 ㅋㅋ)이 좁다 à Driving과 check 조건 교환 불가능 à Sort Merge Join
n 부분범위처리 불가능 à Join에서 상수로 받은 데이터 (Driving 조건)로 Check 조건 데이터의 양을 확인하여 어떤 Join을 할지 결정한다.
6. START JOIN
- 여러 개의 작은 테이블을 Cartesian 조인으로 묶음
- 랜덤액세스 현저하게 감소
- 인덱스 구조에 따라 조심해서 써야한다. (인덱스 전략 중요)
- DW에 적합
'cd database > 대용량데이터베이스' 카테고리의 다른 글
대용량 DB 12강 (해쉬조인, 리커시브 SQL) (0) | 2014.05.29 |
---|---|
대용량 DB 10강 (인덱스 , 조인) (0) | 2014.05.16 |
대용량 DB 9강 정리 (인덱스 선정) (0) | 2014.05.14 |
대용량 DB 7강 정리 (index의 사용) (0) | 2014.05.03 |
대용량 DB 5강 정리(lock) (0) | 2014.04.22 |