본문 바로가기
ORACLE

Nested Loop 조인

by 리틀홍콩 2015. 9. 16.
728x90

쿼리 튜닝을 지켜보다 보면, Nested Loop라는 걸 종종 보게 된다.

( 오라클에서도 SQLServer에서도 동일한 명칭을 사용한다. )

Nested Loop 의미를 안다면 쿼리 튜닝을 하는데 도움이 될 것이다.


정의 : Nested Loop 조인은 연결고리가 되는 컬럼을 사용하여,

       바깥쪽 테이블(driving table)과 안쪽 테이블 2개를 서로 연결한다.

설명 : 2개의 테이블이 있을때 바깥쪽 테이블과 안쪽 테이블이 어떤 컬럼으로 연결고리가 맺어지는 걸 말하는 것이다.


       즉 2개의 테이블이 Loop를 돌면서 연결고리가 되는 항목을 추출하는 과정이라고 보면 시운 설명이 될 것 같다.

       중첩 for문과같이 for문 안에 for문이 있는 2차원 배열을 생각하면 개념을 이애하기 쉽다.

       바깥쪽(driving table)의 사이즈가 크면 클 수록 실행속도는 저하 된다.

       때문에 바깥쪽 테이블은 가능한 사이즈가 작은 테이블을 선정하는 것이 중요하다.

       혹은 사이즈를 최적으로 줄여야한다.

      

       실행 속도 = 바깥 테이블 사이즈 X 안쪽 테이블 접근 횟수


       때문에 두가지를 초점을 맞춰야한다.

       바깥 테이블(driving table)은 사이즈가 작은 테이블을 선정하거나 사이즈를 줄여야하고,

       안쪽 테이블(driven table)은 인덱스를 통해서 테이블에 접근 하는 횟수를 줄여야한다.


--
결합하기 위해 기준이 되는 테이블 : driving 테이블 또는 outer 테이블
결합되어지는 테이블 : driven 테이블 또는 inner 테이블


쉽게 생각하시면 조인되는 두테이블에서 먼저 읽는 테이블이 드라이빙테이블

드라이빙테이블이 아우터테이블이고 드리븐테이블이 이너테이블입니다


mysql 은 nested loop 조인만 있으므로 이 관계가 명확하죠

참고로 아우터와 이너라는 용어는 nested loop 조인의 실행 방식을 생각하면 됩니다
a, b 두 테이블을 조인하는데 a 가 먼저 읽힌다면 아래처럼 실행되겟죠

for(a 데이터읽기)
{
  for(b 데이터읽기)
  {
   if(조건이 맞을때) ...
  else ...
  }
}


출처 : 오라클 실무활용 SQL 튜닝( 정재준 지음 - 해지원 출판 )
      
http://toriworks.tistory.com/104
       http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_db&wr_id=190085 

 

참고사이트 : http://777775959.blog.me/220441740188

'ORACLE' 카테고리의 다른 글

DBLINK시 LOB CLOB 컬럼오류 해결  (0) 2015.10.05
SQL 튜닝방법론  (0) 2015.09.16
Oracle Join, ANSI Join 차이  (0) 2015.09.16
Long타입 To_char형태로 변환  (0) 2015.09.08
PreparedStatement 쿼리문 추출하기  (1) 2015.04.16

댓글