1 . JOIN Method

 

▷ 조인의 종류 (수행 알고리즘에 따른 분류)

 ◎ Nested-Loop JOIN (중첩 루프 조인)

 ◎ Sort Merge JOIN (병합조인)

 ◎ Hash JOIN (해시 조인)

 ◎ Remote JOIN (리모트 조인)

 

로우가 많아 질수록 쿼리의 코스트(Cost)는 높아진다. 당연히 처리할 데이터가 많기 때문이다.

이렇게 모두 비례적으로 성능의 떨어지지만 떨어지는 정도에는 차이가 있다.

우선 Loop가 가장 기본적인 방법이며, 양이 적을 때에는 성능이 좋지만 데이터가 많아질 수록 비용도 급격히 증가한다.

Merge 방식은 데이터가 적을 경우에는 Loop 보다는 못하지만, 양이 많아 질 수록 더 뛰어난 성능을 보인다. (여러 조건들이 있음)

Hash 방식은 데이터가 얼마 없을 경우에는 그 오버헤드(Overhead)로 인하여 성능이 좋지 않지만, 데이터가 많을수록 Loop 보다는 낮고 Merge 보다는 못하게 비용이 증가한다.

 

1) Nested-Loop JOIN (중첩 루프 조인)

한 집합의 원소 값을 다른 집합의 원소 값과 매칭해 나가는 방법

(가능한 모든 경우를 조회하여 결과 집합을 찾는 방법)

 

성능을 높이기 위한 방법

  가) 후행테이블의 크기가 작을수록

  나) 요소들의 비교가 빠르게 이루어 지도록 인덱스가 미리 설정되어 있어야 한다.

 

* 선행테이블(Driving Table) : 찾는 주체가 되는 테이블

* 후행테이블(Driven Table) : 비교 대상이 되는 테이블

 

▷ 예제

 --Nested-Loop Join

SELECT *

FROM pubs.dbo.employee e inner loop join pubs.dbo.jobs j

on e.job_id = j.job_id

 

[쿼리 분석기에서 Ctrl+L 을 눌러 실행계획을 실행]

첨부 이미지

옵티마이저는 통계를 기반으로 로우의 크기가 작은 쪽을 후행테이블로 선택한다. 여기서 선행 테이블(Driving Table)은 Employee 테이블이다. 선행 테이블 Employee 를 기준으로 Nested Loop 해서 Jobs 테이블을 조인한다.

쿼리 분석기의 실행계획에서는 선행테이블의 선이 굵게 나타난다. Nested Loop 조인은 가장 기본적인 조인 전략으로 데이터 량이 적은 경우에는 이보다 확실한 방법이 없다.

 

2) Sort Merge JOIN (병합 조인) 

한집합과 다른 집합을 합하기 위해서 양쪽 다 정렬이 되어 있어야만 비교 가능하다. 그리고 Sort Merge의 경우 대등하게 합병되기 때문에 선행 또는 후행 테이블이 존재하지 않는다.

 

▷ 예제

 --Sort Merge Join

SELECT *

FROM pubs.dbo.employee e inner merge join pubs.dbo.jobs j

on e.job_id = j.job_id

 

[쿼리 분석기에서 Ctrl+L 을 눌러 실행계획을 실행]

첨부 이미지

 

 

3) Hash JOIN (해시 조인)  

해시를 사용하는 경우는 해당 조인 키가 전혀 정렬되어 잇지 않고, 인덱스도 존재하지 않으면서 비교해야 할 대상은 많은 때이다.

 

▷ 예제

 --Hash Join

SELECT *

FROM pubs.dbo.employee e inner hash join pubs.dbo.jobs j

on e.job_id = j.job_id

 

[쿼리 분석기에서 Ctrl+L 을 눌러 실행계획을 실행]

 첨부 이미지

HASH JOIN 상세 참고

http://ksewookk.blog.me/100117311222

 

'SQL' 카테고리의 다른 글

컬럼값에서 HTML 태그 제거하기  (0) 2017.06.20
하이버네이트 API 문서  (0) 2017.06.19
JOIN 종류 정리  (0) 2017.06.18
Hash Join  (0) 2017.06.18
인덱스 사용이 불가한 경우  (0) 2017.06.12
결합인덱스 사용 시 선행컬럼 선정순서  (0) 2017.06.12

+ Recent posts