쿼리 튜닝을 지켜보다 보면, 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
'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 |
댓글