cd database/대용량데이터베이스

대용량 DB 11강 (Join)

성덕 2014. 5. 23. 23:14

(이번 동영상은 다시 보는 게 도움될 듯!)

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에 적합