DataBase/SQL

SQL_LV ) 실행 계획이 SQL 구문의 성능을 결정

프로그래멍 2020. 7. 4. 00:42

실행 계획이 만들어지면 DBMS는 그것을 바탕으로 데이터 접근을 수행한다.

 

1. 실행 계획 확인 방법

SQL 구문의 지연이 발생했을 때 제일 먼저 실행 계획을 살펴봐야 한다.

3개의 기본적인 SQL구문의 실행 계획을 알아보자.

  1. 테이블 풀 스캔(FULL SCAN)의 실행 계획
  2. 인덱스 스캔의 실행 계획
  3. 간단한 테이블 결합의 실행 계획

2. 테이블 풀 스캔의 실행 계획

실행 계획

-조작 대상 객체

on이라는 글자 뒤에 shops이 객체이다.

또한 이 부분은 테이블 이외에도 인덱스, 파티션, 시퀀스처럼 SQL 구문으로 조작 할 수 있는 객체라면 무엇이라도 올 수 있다.

 

-객체에 대한 조작의 종류

실행 계획에서 가장 중요한 부분이다.

PostgreSQL은 문장의 앞부분에 나온다.

'Seq Scan'은 '순차적인 접근(Sequential Scan)'의 줄임말로 '파일은 순차적으로 접근해서 해당 테이블의 데이터 전체를 읽어낸다' 는 의미이다.

 

-조작 대상이 되는 레코드 수

rows.

 

3. 인덱스 스캔의 실행 계획

인덱스 실행 계획

 

-조작 대상이 되는 레코드 수

Rows가 1로 변경.

접근 대상은 반드시 레코드 하나이기 때문이다.

 

-접근 대상 객체와 조작

PostgreSQL에서는 'Index Scan', Oracle에서는 'INDEX UNIQUE SCAN'이라는 조작이 나타난다.

이는 인덱스를 사용해 스캔을 수행한다는 것이다.

 

 

4.간단한 테이블 결합의 실행 계획

결합을 사용하면 실행 계획이 상당히 복잡해지므로, 옵티마이저도 최적의 실행 계획을 세우기 어렵다.

따라서 결합 시점의 실행 계획 특성을 공부하는 것은 굉장히 중요한 의미가 있다.

 

가장 간단한 결합 알고리즘은 Nested Loops(중첩 반복)이다.

한쪽 테이블을 읽으면서 레코드 하나마다 결합 조건에 맞는 레코드를 다른 쪽 테이블에서 찾는 방식이다.

 

두 번째는 Sort Merge이다.

결합키로 레코드를 정렬하고, 순차적으로 두 개의 테이블을 결합하는 방법이다. 워킹 메모리 사용.

 

세 번째는 Hash이다.

이름 그대로 결합 키값을 해시값으로 맵핑하는 방법이다.

해시 테이블을 만들어야 하므로, 마찬가지로 작업용 메모리 영역을 필요로 한다. (워킹메모리)

 

*실행 계획 읽는 방법

실행 계획은 일반적으로 트리 구조이다.

이때 중첩 단계가 깊을수록 먼저 실행된다.(밑에서 부터)

같은 중첩 단계에서는 위에서 아래로 실행한다는 뜻이다.