핵심

옵티마이저는 결과를 바꾸지 않고 경로를 바꿉니다. 같은 결과를 내는 방법이 여러 개면, 어떤 순서와 방식으로 읽고 조인할지 비교해 가장 비용이 낮은 실행 계획을 고릅니다.

입력

같은 결과를 원하는 SQL

사용자는 원하는 데이터만 말하고, 실제 읽기 경로는 DBMS가 정합니다.

→
후보 경로 조합

실행 계획 후보를 여러 개 만든다

접근 경로 Full Scan으로 넓게 읽을지, Index Scan으로 바로 찾을지
조인 순서 어느 테이블부터 줄인 뒤 다음 테이블을 붙일지
조인 방식 Nested Loop, Hash, Sort Merge 중 무엇이 유리한지
→
비용 비교

통계로 작업량을 추정

예상 행 수 조건에 맞는 데이터가 얼마나 남는지 계산
I/O와 정렬 부담 얼마나 읽고, 조인하고, 정렬해야 하는지 비교
→
결정

가장 싼 계획 확정

선택된 실행 계획
이후 실제 SQL 실행은 이 경로를 따라 진행됩니다.

결과는 같아도, 여기서 고른 경로가 응답 시간을 크게 바꿉니다.

실행 계획
읽기 시작점
어디서 먼저 읽는가
+
조인 순서
어떤 순서로 줄이는가
+
결합 방식
어떻게 합치는가