본문 바로가기

Hanbose Study/DB Study

실행계획의 유형 : 조인의 기본유형

실행계획의 유형 : 조인의 기본유형 Talk About DB

2007/04/23 19:07

http://blog.naver.com/devsun98/90016797733

이번에는 실행계획의 유형 중 조인의 유행에 대해 살펴보겠다.


- Nested loops Join

- Sort Merge Join

- Hash Join

- Semi Join

- Cartesian Join

- Outer Join

- Index Join


Nested loops Join은 가장 고전적인 형태의 조인방식이면서도 현실적으로 가장 많이 적용되고 앞으오도 그럴 수 밖에 없는 가장 기본적인 조인이다. 먼저 수행되는 집합의 처리범위가 전체의 일량을 좌우한다는 것과, 나중에 반복 수행되는 연결작업이 랜덤 엑세스로 발생한다는 점이 핵심적인 특징이다.


Sort Merge Join도 고전적인 형태에 속하며, Nested Loops Join이 가진 문제를 해결하기 위한 일종의 대안이 될 수 있다. 즉 조인이 대상 범위가 넓을 때 발생하는 랜덤 엑세스를 줄이기 위한 경우나 연결고리에 마땅한 인덱스가 존재하지 않을 때를 해결하기 위한 대안이다. 이 조인의 가장 큰 특징은 연결을 위해 랜덤 엑세스를 하지 않고 스캔을 하면서 이를 수행하는 것인데, 이로 인해 연결작업은 훨씬 효과적으로 수행하게 되었지만 먼저 정렬을 해야 한다는 또 다른 부담이 생겼다. 만약 데이터량이 많아 정렬을 메모리 내에서 수행을 할 수 없다면 Nested loops Join보다 오히려 더 성능이 나쁠 수 있다.


Hash Join은 해쉬함수 기법을 활용하여 조인을 수행하는 방식이다. 정렬을 하지 않으면서 조인을 수행할 수 있으므로, 일반적으로 좋은 성능을 나타낸다. 이러한 특성으로 최근의 옵티마이져는 대부분의 조인에서 Hash Join을 사용할려고 한다.


Semi Join은 각종 다양한 비교 연산자에 의해서 사용된 서브쿼리가 메인쿼리와 연결되는 모든 경우를 의미한다.


Catesian Join은 M:M조인을 말한다. 일반적으로 조인의 순서가 잘못되었거나, 아니면 의도적으로 유도했을 경우에만 나타난다.


Outer Join은 어떤 대상 집합을 기준으로 거기에 아우터 조인되어 있는 집합에 대응되는 로우가 없더라도 기준 집합의 모든 로우들을 리턴하는 조인을 의미한다.


Index Join이란 어떤 쿼리에서 특정 테이블에 사용된 모든 칼럼이 하나 이상의 인덱스들에 존재할 때 그 인덱스들 간의 해쉬 조인을 통해 엑세스를 하는 기법이다. 다시 말해서 하나 이상의 인덱스들을 결합하여 모든 처리를 할 수 있을 때 테이블을 엑세스하지 않고 인덱스들로만 처리하는 방법이다.