Innovating today, leading tomorrow

Tibero - 튜닝
[Tibero] SQL Tuning (4)

[Tibero] SQL Tuning (4)

4. 실행계획

옵티마이저가 생산한, 사용자가 원하는 작업을 가장 효율적으로 수행할 수 있는 최적의 데이터 엑세스 예상 경로를 트리 구조로 표현합니다.
실행계획에는 SQL 문이 실행될 때 필요한 모든 정보를 포함합니다.

4.1. 실행계획 포함 정보

  • 액세스 경로: 어떠한 방법으로 데이터에 접근할 것인가?
    (Index Scan, Index Fast Full Scan, Full Table Scan 등)
  • 조인방법 : 어떤 조인 방법을 사용할 것인가?
  • 조인순서 : 어떠한 조인의 순서로 풀릴 것인가?

4.2. 실행계획 확인 방법

실행순서

트리 구조의 최하위 레벨부터 실행합니다.
같은 레벨일 경우 위에서부터 실행합니다.

※예시 실행순서: 4 > 3 > 2 > 1

5. 힌트 (Hint)

사용자가 직접 옵티마이저에게 최적의 실행 경로를 알려주는 지시문 입니다.
SQL문에 주석을 추가해 최적화된 특정 행동을 지시할 수 있습니다.

5.1. 힌트 작성 규칙

  • 힌트는 반드시 SELECT, INSERT, UPDATE, DELETE 키워드 뒤에만 사용할 수 있습니다.
  • 문법에 맞지 않는 힌트는 주석으로 간주합니다.
  • Table을 지정할 때에는 alias를 사용합니다.
  • 같은 query block 안의 대상만 지정 가능합니다.

5.2. 힌트 종류

프로시저
기능

NO_MERGE

Query Rewrite 단계에서 특정 뷰에 대한 뷰 병합을 하지 않도록 지시

NO_MERGE

최소한의 자원을 사용하여 전체 결과에 대한 처리량이 가장 많도록 지시

FIRST_ROWS

첫 로우에서 n 로우까지 가장 빠르게 보여줄 수 있도록 처리

FULL

힌트를 명시한 테이블에 대해 풀 테이블 스캔을 하도록 지시

INDEX

명시한 테이블에 대해 명시한 인덱스를 사용하는 인덱스 스캔으로 유도

NO_INDEX

명시한 테이블에 대해 명시한 인덱스를 사용하는 인덱스 스캔을 하지 않도록 지시

INDEX_ASC

명시한 테이블에 대해 명시한 인덱스를 사용하되 오름 차순으로 스캔하도록 지시

INDEX_DESC

명시한 테이블에 대해 명시한 인덱스를 사용하되 내림 차순으로 스캔하도록 지시

NO_INDEX_FFS

명시한 테이블에 대해 명시한 인덱스를 Fast Full Scan 하지 않도록 지시

LEADING

조인에서 먼저 조인되어야 할 테이블의 집합을 명시

ORDERED

FROM 절에 명시된 순서대로 조인하도록 지시

USE_NL

Nested Loop 조인으로 조인을 하도록 지시

NO_USE_NL

Nested Loop 조인을 하지 않도록 지시

USE_NL_WITH_INDEX

Nested Loop 조인을 하되 해당 테이블은 인덱스를 사용하여 Nested Loop 조인을 하도록 지시

USE_MERGE

Merge 조인으로 조인을 하도록 지시

NO_USE_MERGE

Merge 조인을 하지 않도록 지시

USE_HASH

해시 조인을 하도록 지시

 

NO_USE_HASH

해시 조인을 하지 않도록 지시

5.3. 힌트 참고사항

구분설명
JOIN ORDERING/*+ LEADING (T1 T3) */
조인에서 먼저 조인되어야 할 테이블의 집합을 명시

/*+ ORDERED */FROM 절에 명시된 순서대로 조인하도록 지시​

위의 2개 함께 사용 불가
– 같이 쓰이면 ORDERED가 먼저 적용, 적용이 불가능할 때는 일부 무시 가능
JOIN METHOD/*+ USE_HASH (T1) */
USE_HASH (T): JOIN의 오른쪽 일 경우 HASH로 풀림
LEADING이나 ORDERED와 함께 사용
TABLE ACCESS METHODFULL, INDEX, INDEX_ASC, INDEX_DEC, INDEX_FFS, NO_INDEX 등​

/*+ FULL (T1) */
/*+ INDEX (T1 I1) */ or /*+ INDEX (T1) */
/*+ NO_INDEX (T1 I1) */
or /*+ NO_INDEX (T1) */
VIEW MERGEVIEW

FROM절에 있는 DATA SOURCE, 현재 QUERY BLOCK에서 볼 때 테이블과 동일
=> SELECT /*+ NO_MERGE */ *
  FROM (SELECT * FROM T) TT
SUBQUERY UNNESTSUBQUERY
PREDICATE이나 SELECT LIST에서 사용되는 하위 쿼리UERY
=> PREDICATE이나 SELECT LIST에서 사용되는 하위 쿼리
SUBQUERY 사례UERY 사례
=> SELECT /*+ NO_UNNEST */ (SELECT A FROM T2)
FROM T1​

=> SELECT /*+ NO_UNNEST */ *
  FROM T1
  WHERE T1.A IN (SELECT B FROM T2)

광고성 정보 수신

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다.
내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보
  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
 

개인정보 수집 및 이용

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다. 내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보

  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
  •