상세 컨텐츠

본문 제목

실행계획과 옵티마이저 힌트

Computer Science/데이터베이스

by yooputer 2024. 10. 16. 17:29

본문

SQL 최적화 과정

  1. SQL 파싱 : SQL 파서가 SQL을 파싱
  2. SQL 최적화 : 옵티마이저가 생성한 다양한 실행 경로중 가장 효율적인 실행 경로 선택
  3. 로우 소스 생성 : 로우소스생성기가 실제 실행 가능한 코드 또는 프로시저 형태로 포맷팅

옵티마이저

  • 가장 효율적인 데이터 액세스 경로를 생성하는 DBMS의 핵심 엔진

실행 계획

  • SQL 옵티마이저가 생성한 처리 절차를 트리구조로 표현한 것
  • 테이블을 스캔하는지, 인덱스를 스캔하는지, 어떤 인덱스를 스캔하는지 등등

실행 계획 조회

  1. 쿼리 앞에 EXPLAIN 붙이기
  2. 디비버에서 ctrl + shift + E
 

[SQL] SQL 성능확인, Query Plan 보는 법 (Oracle, MySQL)

1. Query Plan이란? SQL 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터 접근에 사용되는 순서가 있는 단계별 집합 엑세스 플랜의 관계형 모델 개념의 특화된 경우 SQL이 선언형이기 때문에 주어진

spidyweb.tistory.com


옵티마이저 힌트

  • 옵티마이저 힌트를 사용해 실행계획을 바꿀 수 있음

옵티마이저 힌트 사용법

1. 아래와 같이 주석 기호에 '+'를 붙인다. 

SELECT /*+ INDEX(테이블 인덱스명) */

 

2. 힌트 안에 인자를 나열할 땐 콤마를 사용하지만, 힌트와 힌트 사이에는 사용하지 않는다

/*+ INDEX(테이블 PK명) INDEX(테이블, PK명) */ 모두 유효
/*+ INDEX(테이블), FULL(테이블) */ 첫번째 힌트만 유효함

 

3. 테이블을 지정할 때 스키마명을 명시하면 안된다

4. FROM절에서 테이블의 별칭을 지정했다면 힌트에도 반드시 테이블의 별칭을 사용한다. 

자주 사용하는 옵티마이저 힌트 목록

분류 힌트 설명
최적화 목표 ALL_ROWS 전체 처리속도 최적화
FIRST_ROWS(N) 최초 N건 응답속도 최적화
액세스 방식 FULL Table Full Scan으로 유도
INDEX Index Scan으로 유도
INDEX_DESC Index를 역순으로 스캔하도록 유도
INDEX_FFS Index Fast Full Scan으로 유도
INDEX_SS Index Skip Scan으로 유도
조인 순서 ORDERED FROM절에 나열된 순서대로 조인
LEADING LEADING 힌트 괄호에 기술한 순서대로 조인
SWAP_JOIN_INPUTS  해시조인시, BUILD_INPUT을 명시적으로 선택
조인 방식 USE_NL NL 조인으로 유도
USE_MERGE 소프트 머지 조인으로 유도
USE_HASH 해시 조인으로 유도
NL_SJ NL 세미조인으로 유도
MERGE_SJ 소트 머지 세미조인으로 유도
HASH_SJ 해시 세미조인으로 유도
서브쿼리 팩토링 MATERIALIZE WITH문으로 정의한 집합을 물리적으로 생성하도록 유도
INLINE WITH문으로 정의한 집합을 물리적으로 생성하지 않고 INLINE 처리하도록 유도
쿼리 변환 MERGE 뷰 머징 유도
NO_MERGE 뷰 머징 방지
UNNEST 서브쿼리 Unnesting 유도
NO_UNNEST 서브쿼리 Unnesting 방지
PUSH_PRED 조인조건 Pushdown 유도
NO_PUSH_PRED 조인조건 Pushdown 방지
USE_CONCAT OR 또는 IN-List 조건을 OR-Expansion으로 유도
NO_EXPAND OR 또는 IN-List 조건을 OR_Expansion 방지
병렬처리 PARALLEL 테이블 스캔 또는 DML을 병렬방식으로 처리하도록 유도
PARELLEL_INDEX 인덱스 스캔을 병렬방식으로 처리하도록 유도
PQ_DISTRIBUTE 병렬 수행시 데이터 분배방식 결정
기타 APPEND Direct-Path Insert로 유도
DRIVING_SITE DB Link Remote 쿼리에 대한 최적화 및 실행 주체 지정
PUSH_SUBQ 서브쿼리를 가급적 빨리 필터링하도록 유도
NO_PUSH_SUBQ 서브쿼리를 가급적 늦게 필터링하도록 유도

 


참고자료

https://spidyweb.tistory.com/460

 

[SQL] SQL 성능확인, Query Plan 보는 법 (Oracle, MySQL)

1. Query Plan이란? SQL 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터 접근에 사용되는 순서가 있는 단계별 집합 엑세스 플랜의 관계형 모델 개념의 특화된 경우 SQL이 선언형이기 때문에 주어진

spidyweb.tistory.com

 

관련글 더보기