3. 다시 JONES을 시작점으로 나머지 행 중 mgr이 JONES의 empno와 동일한 행을 찾음
-> 여기서는 SCOTT, FORD가 있음
--> 여기서 궁금한 점 :
ㄱ. 상위행에서 하위행을 찾을 때마다 테이블의 풀스캔을 실행하는 건지?
----> 인덱스가 있다면 인덱스를 타겠죠.
----> empno 인덱스, mgr 인덱스 각각 있는것이 좋습니다.
ㄴ. 아니면 최초 풀 스캔(1회) 이후 행의 재배치(ORDER BY)만 이뤄지는 건지?
----> 이건 아닌 듯
ㄷ. 계층구조 쿼리절은 반드시 풀스캔이 일어날 수 밖에 없는 구조인 것인지?
----> 인덱스가 있다면 인덱스를 타겠죠.
10g 까지는 테이블을 반복적으로 읽는 실행계획이 나오는데요.
11g 부터는 테이블을 한번만 읽는 실행계획이 수립됩니다.
11g 는 진화했네요.
여기까진 질문하신 실행계획이 풀리는거에 대한거구요.
SQL 자체의 실행 순서도 중요합니다.
단독 테이블인 경우는 순서가 다음과 같습니다.
1. from
2. start with
3. connect by
4. where -- (중요포인트)계층구조 전개 후 필터링 합니다.
5. select
그러나 두개 테이블 조인의 경우는 꽤 까다롭게 동작합니다.
1. from
2. Join -- (중요포인트)조인 조건이 먼저 수행되고
3. start with
4. connect by
5. where -- (중요포인트)필터 조건은 나중에 수행 합니다.
6. select
인덱스는 Start With 절에서도 탈 수 잇구요
Connect By 절에서도 탈 수 있지요.
결합인덱스(mgr, empno)를 만들면 더 효과가 있을것도 같구요.
그런데 여기까지는 10g 의 얘기구요. 테이블을 여러번 읽어야만 하므로
11g 부터는 앞서 언급했듯이 동작방식이 더 스마트하게 바뀐듯 하네요.
한번에 읽어 처리하려니 풀스캔이 나을 듯 합니다.