explain analyze 명령으로 쿼리의 실행계획과 단계별 소요된 시간을 확인할 수 있다는 내용을 공부하는 중임.

책에서 설명한 예시가 아래의 쿼리임.

EXPLAIN ANALYZE SELECT e.emp_no, avg(s.salary) FROM employees e INNER JOIN salaries s ON s.emp_no=e.emp_no AND s.salary>50000 AND s.from_date<='1990-01-01' AND s.to_date>'1990-01-01' WHERE e.first_name='Matt' GROUP BY e.hire_date;그리고 위 쿼리의 결과가 다음과 같음.
A) -> Table scan on <temporary> (actual time=0.001..0.004 rows=48 loops=1) B) -> Aggregate using temporary table (actual time=3.799. .3.808 rows=48 loops=1) C) -> Nested loop inner join (cost=685.24 rows=135) (actual time=0.367..3.602 rows=48 loops=1) D) -> Index lookup on e using ix_firstname (first_name='Matt') (cost=215.08 rows=233) (actual time 0.348..1.046 rows=233 loops=1) E) -> Filter: ((s.salary > 50000) and (s.from_date <= DATE' 1990-01-01') and (s.to_date > DATE' 1990-01-01')) (cost=0.98 rows=1) (actual time 0.009..0.011 rows=0 loops=233) F) -> Index lookup on s using PRIMARY (emp_no=e.emp_no) (cost=0.98 rows=10) (actual time=0.007..0.009 rows=10 loops=233)

책에서 위와 같은 Tree 형식의 실행계획의 순서를 파악할 때의 규칙은 다음과 같대. 1. 들여쓰기가 같은 레벨에서는 상단에 위치한 라인이 먼저 실행.

2. 들여쓰기가 다른 레벨에서는 가장 안쪽에 위치한 라인이 먼저 실행.


내 생각에 위 규칙대로라면 실행 순서는 F -> E -> D -> C -> B -> A 여야 한다고 생각하는데,

책에서는 실행 순서가 D -> F -> E -> C -> B -> A 라고 함.


규칙에서는 들여쓰기가 다른 레벨에서는 가장 안쪽에 위치한 라인이 먼저 실행된다고 하는데, 왜 가장 안쪽의 F 보다 D가 먼저 실행된다는 건지 이해가 안 감.

이유를 아는 사람 설명 부탁해.