최보름달

[SQL] 옵티마이저 실행계획 본문

문송한 회사생활/SQL 공부

[SQL] 옵티마이저 실행계획

PieMoon 2020. 8. 21. 20:42

옵티마이저 실행계획

실행계획을 생성한다는 것은 SQL을 어떤 순서로 어떻게 실행할 지를 결정하는 작업이다. 

동일한 SQL에 대해 결과를 낼 수 있는 다양한 처리 방법(실행계획)이 존재할 수 있지만 각 처리 방법마다 실행 시간(성능)은 서로 다를 수 있다. 

옵티마이저는 다양한 처리 방법 중에서 가장 효율적인 방법을 찾아준다. 

 

실행계획을 구성하는 요소

  • 조인 순서(join order) : 조인 작업을 수행할 때 참조하는 테이블 순서 
  • 조인 기법(join method) : 두 개의 테이블을 조인할 때 사용할 수 있는 방법. NL JOIN, HASH JOIN, SORT MERGE JOIN 등이 있다. 
  • 액세스 기법(access method) : 하나의 테이블을 액세스 할  때 사용할 수 있는 방법. 인덱스를 이용하여 테이블을 액세스 하는 인덱스 스캔과 테이블 전체를 모두 읽으면서 조건을 만족하는 행을 찾는 전체 테이블 스캔(Full table scan)이 있다. 
  • 최적화 정보(optimization information) : 옵티마이저가 실행계획의 각 단계마다 예상되는 비용 사항을 표시한 것. 실행계획에 비용 사항이 표시된다는 것은 비용기반 최적화 방식으로 실행계획을 생성했다는 것을 의미하고 비용 사항이 표시되지 않았다면 규칙기반으로 최적화 실행계획을 생성한 것이다.  최적화 정보에는 cost, card(cardinality), bytes가 있다. 
  • 연산(operation) : 여러 가지 조작을 통해서 원하는 결과를 얻어내는 일련의 작업. 연산에는 조인기법, 액세스 기법, 필터, 정렬, 집계, 뷰 등 다양한 종류가 존재한다. 

SQL 처리 흐름도 

위 그림에서

조인순서는 TAB1 -> TAB2 이다. 

TAB1 는 Outer Table 또는 Driving Table 이라고 한다. 

TAB2 는 Inner Table 또는 Lookup Table 이라고 한다. 

 

액세스 방법은

TAB1 는 전체 스캔,

TAB2 는 I01_TAB2 라는 인덱스로 인덱스 스캔을 했다. 

 

조인 방법은

NL 조인을 했다. 

 

TAB1 에 대해서는 액세스 스캔 방식이고, 조인 시도 및 I01_TAB2 인덱스를 통한 TAB2액세스는 랜덤 방식이다.

 

 

 

 

kdata 한국데이터진흥원에서 출간한 SQL 전문가 가이드 2013 Edition을 요약했습니다.