TIL. 164 SQL 최적화 기본원리 (실행계획)

조윤식·2022년 9월 19일
0

실행계획(Execution Plan)

실행계획(Execution Plan)이란 SQL에서 요구한 사항을 처리하기 위한 절차와 방법을 의미한다.동일한 SQL에 대해 결과를 낼 수 있는 다양한 처리 방법(실행계획)이 존재할 수 있지만 각 처리 방법마다 실행 시간(성능)은 서로 다를 수 있다.
옵티마이저는 다양한 처리 방법들 중에서 가장 효율적인 방법을 찾아준다.(최적의 실행계획을 생성)

실행계획의 구성요소에는

조인 순서(Join Order)

조인 기법(Join Method)

액세스 기법(Access Method)

최적화 정보(Optimization Information)

연산(Operation) 등이 있다.

조인순서(Join Order)
수행할 때 참조하는 테이블의 순서

FROM A
INNER JOIN B
일 때, 조인 작업을 위해 먼저 A테이블을 읽고 B 테이블을 읽는 작업을 수행한다면 조인 순서는 A -> B이다.
(논리적으로 가능한 조인순서는 n! 만큼 존재, n 은 FROM 절 다음에 나온 테이블 수)

조인 기법(Join Method)

두 개의 테이블을 조인할 때 사용할 수 있는 방법

NL Join, Hash Join, Sort Merge Join 등이 존재

액세스 기법(Access Method)

하나의 테이블을 액세스할 때 사용할 수 있는 방법

인덱스를 이용하는 인덱스 스캔(Index Scan)과 테이블 전체를 모두 읽는 전체 테이블 스캔(Full Table Scan) 등이 존재

최적화 정보(Optimization Information)

옵티마이저가 실행계획의 각 단계마다 예상되는 비용 사항을 표시한 것

최적화 정보에는 Cost, Card, Bytes가 존재

Cost 는 상대적인 비용 정보

Card 는 Cardinality의 약자로서 주어진 조건을 만족한 결과 집합 혹은 조인 조건을 만족한 결과 집합의 건수를 의미

Bytes 는 결과 집합이 차지하는 메모리 양을 바이트로 표시한 것

연산(Operation)

여러 가지 조작을 통해서 원하는 결과를 얻어내는 일련의 작업

연산에는 조인 기법,  액세스 기법, 필터, 정렬, 집계, 뷰 등 다양한 종류가 존재

SQL 처리 흐름도

SQL 처리 흐름도(Access Flow Diagram)란 SQL의 내부적인 처리 절차를 시각적으로 표현한 도표 (실행계획을 시각화한것)

위의 처리 흐름도를 다음 SQL문이라고 가정하자

SELECT ... 
FROM TAB1 A, TAB2 B WHERE A.KEY = B.KEY
AND A.COL1 = condition1
AND B.COL2 = condition2

처리흐름도와 SQL문을 비교했을 때,
TAB1의 A.COL1 컬럼은 이용가능한 인덱스가 존재하지 않기 때문에 FULL SCAN을 함 (따라서 엑세스 건수는 TAB1 테이블의 총 건수)

조인 시도 건수는 TAB1을 액세스한 후 테이블에서 읽은 해당 건에 대해 A.COL1 = condition1 조건을 만족한 데이터 건 수 (만족하지 않는다면 더 이상 조인 작업을 진행할 필요가 없음)

테이블 액세스 건수는 B.KEY 컬럼만으로 구성된 인덱스인 I01_TAB2 에서 B.KEY = A.KEY 조건을 만족한 건

성공 건수는 TAB2 테이블을 액세스해서 B.COL2 = condition2 조건까지 만족한 건을 뜻함

출처: https://cornswrold.tistory.com/82?category=777471 [평범한개발자노트:티스토리]

profile
Slow and steady wins the race

0개의 댓글