select a.col3
, b.col3
from tab1 a
, tab2 b
where a.col1 = b.col1
and a.col2 = 상수
and b.col2 = 상수
order by a.col1
위와 같은 쿼리가 있을 때...
가장 많이 쓰여지는 nested loops 조인 방식을 예로 든다면,
두 테이블 중 어느 한 테이블이 먼저 읽혀지게 되는데
tab1이 먼저 읽혀진다면 a.col2 = 상수 에 해당하는 로우들을 먼저 뽑은 후에
그 로우들 중 하나를 가지고 조인 조건인 a.col1 = b.col1 을 실행합니다.
이때 tab1 이 먼저 읽혀졌으므로 a.col1 의 값은 상수로 바뀌게 되어
b.col1 = 상수 와 같이 실행이 됩니다.
조인 조건이 실행된 후 나온 결과 로우들을 가지고 b.col2 = 상수를 실행해서
나온 결과 로우들이 실제 조회될 결과셋이 되는거죠.
tab1에서 로우 하나씩을 뽑아내면서 위 과정을 반복해서 결과셋을 완성합니다.
이렇게 완성된 결과셋을 가지고 정렬을 실행하고 결과를 화면에 보여주게 되는거죠.
tab2 가 먼저 읽히게 되도 위와 같은 과정을 통하게 되고요.
어느 테이블이 먼저 읽히게 되느냐 하는 것은 테이블의 인덱스 상황에 따라 많이 좌우되고
그외 조인방식이나 분포 등 다양한 상태들에 따라 옵티마이저가 적절하게 선택하게 되겠죠.
위와 같은 간단한 쿼리도 인덱스가 어떻게 있느냐에 따라 풀테이블 스캔을 할 수도 있는거고,
테이블은 전혀 안 읽고 인덱스만 읽는 실행계획이 나올 수도 있는거라서
실행계획을 한번 보시면서 어떤 순서로 진행되는지 파악하시는게 좋을 듯 하네요.
참고로 조인이 있는 쿼리를 간단하게 요구하셔서 간단하게 설명해드린겁니다.^^
by 마농
[2011.01.18 09:53:03]
상세한 실행순서는 실행계획을 봐야 알수 있구요.
조인방식에 따라 처리과정에 차이가 있습니다.
일반적인 SQL 문장을 해석하는 순서는 다음과 같습니다.
1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
6. ORDER BY
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.