'중첩 루프 조인'에 해당되는 글 1건

  1. 2013.11.29 [SQL Server 운영과 튜닝] - Nested Loop Join
IT-Study2013.11.29 09:39

 

3.1 중첩 루프 조인

  • 작은 입력을 인덱스를 허용해 조인할 가장 효과적이다.
  • 슈도 코드

 

 

T1 T2 입력이 작은 테이블을 외측 참조 테이블, 쪽을 내측 테이블로 선택한다.

T1 입력에서 하나의 행을 가져와서 T2 입력을 검색하면서 조인 조건에 맞는 행을 찾는다.

T2 입력에서 일치하는 행을 찾았다면 결과 집합으로 선택되고, 추가적으로 일치하는 행이 있는지 나머지 행들과 비교를 계속한다. T2 입력에서 더 이상 비교할 행이 없으면, T1 입력에서 다음 행을 가져와 , ③을 계속한다.

T2 입력에서 조인 조건과 일치하는 행을 찾으면 T1 입력에서 가져온 행은 버려지고 다음 행을 가져온다.

T1 입력에 이상 조인할 행이 없을 때까지 반복한다.

 

중첩 루프 조인의 특징

  조인 횟수는 외측 참조 테이블 입력에 의해 결정된다.

  • 중첩 루프 조인에선 외측 참조 테이블의 크기 만큼 내측 테이블과 조인하기 때문에 외측 참조 테이블의 입력이 조인 횟수를 결정하게 된다.
  • WHERE 조건에서 T_OUTER 크기를 얼마나 줄일 있느냐가 조인 횟수를 결정하고, 결론은 중첩 루프 조인의 성능에 영향을 주게 된다.

  중첩 루프 조인은 메모리를 사용하지 않는다.

  • 외부 참조 테이블은 정렬이나 해시 테이블과 같은 추가작업 없이 바로 내측 테이블과 조인이 가능하다.

 

인덱스와 테이블 선택과의 관계

  • 내측 테이블에 적절한 인덱스가 생성되어 있으면, 효율적으로 조인이 가능하다.
  • 중첩 루프 조인은 내측 테이블을 선택할 테이블 전체를 읽는 작업을 피하기 위해서, 조인 조건으로 사용할 인덱스가 있는 테이블을 선택하려고 한다.
  • 중첩 루프 조인을 사용한다면 내측 테이블로 사용할 테이블에는 적당한 인덱스를 만들어야 원하는 실행계획을 만들 있다.

 

테이블 순서에 따른 중첩 루프 조인의 성능차이

  • 외측 테이블에서 내측 테이블로 조인을 시도하는 횟수도 비용이 발생한다. 그러므로 크기가 작은 외측 테이블 사용하면서 비용을 줄인다.

 

중첩 루프 조인에서 인덱스 선정 기준

  • 외측 테이블: WHERE 절에 기술되는 검색 조건에 맞춰서 인덱스를 생성해야 한다.
  • 내측 테이블: 조인 조건을 기준으로 인덱스를 생성해야 한다.

 

STOP&GO

  • 머지 조인(시작전 정렬 작업), 해시조인(해시 테이블 생성)처럼 조인을 시작하기 전에 나오는 추가 작업
  • 중첩 루프 조인: 조인에 성공한 행은 버퍼에 저장되고, 버퍼가 채워지면 조인이 끝나지 않아도 클라이언트에 전송함( 번째 응답 속도가 빠르다.)
  • 머지 조인은 적당한 인덱스가 없으면 무조건 우선 정렬을 해야만 조인할 있기 때문에 조인하려는 수와 상관없이 항상 T_OUTER 입력을 모두 읽어서 정렬하는 작업이 필요하다.

  

[참고]

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

 

 

 

 

 

신고
Posted by TM ~ing