SELECT S.a, B.a FROM S, B WHERE S.a = B.a;
‡ S : small table, B : big table
‡ analyze 를 수행하면 CBO 는 이미 S가 out table 이고 B 가 inner table이며 , S 를 driving table 로 인식
구분 | Sort merge join(SMJ) | Nested loop join(NLJ) | Hash join(HJ) |
---|---|---|---|
특징 | index 가 여러 level 의 depth 를 가질 때 merge 단계에 들어가기 위해 양쪽 table 이 모두 sort | driving table이 많은 row 의 data 를 갖는 경우 비효율적이 서 inner table 을 여러 번 probe(탐색) | ① HJ는 각 table 에 대해 1 번만 pass하므로 NLJ보다 효율적 ② 작은 table 과 큰 table 의 join 시에 유리 ③ Sort 수행하지 않으므로 SMJ보다 효율적 ④ 주의점 : hash join 은 equi join 에서만 가능 |
COST | ① S 와 B 를 memory 에 읽어와 join key 로 각각 sort 후, join 수행 ② Cost(SMJ) 는 Read(S) + Write(SortRuns(S)) + Read(B) + Write(SortRuns(B)) + Merge(S,B) + CPUSortCost(S + B) 에 비례 | ① S.a의 모든 column과 B.a 의 모든 column 을 match 후, rS* rB key 비교 ② Cost(NLJ) 는 Read(S) + rS *Read(B) 에 비례 | ① 해시 메모리에서 수행됨 ② Cost(HJ)는 Read(S) + Read(B) 에 비례(HJ 알고리즘에 의해서) |