Top 28 오라클 힌트 The 74 Top Answers

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 오라클 힌트 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://toplist.maxfit.vn team, along with other related topics such as: 오라클 힌트 오라클 힌트 PARALLEL, 오라클 힌트 예제, 오라클 힌트 LEADING, 오라클 힌트 INDEX_FFS, 오라클 힌트 FULL PARALLEL, 오라클 힌트 ordered, 오라클 힌트 all_rows, 오라클 힌트 여러개


면접관이 오라클 힌트 써봤냐고 묻는다면? 🙄
면접관이 오라클 힌트 써봤냐고 묻는다면? 🙄


[SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리

  • Article author: devuna.tistory.com
  • Reviews from users: 17431 ⭐ Ratings
  • Top rated: 3.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리 힌트(Oracle Hint)란 무엇일까? … 힌트란 SQL 튜닝의 핵심 부분으로 일종의 지시 구문이다. 즉, 오라클 옵티마이저(Optimizer)에게 SQL문 실행을 위한 … …
  • Most searched keywords: Whether you are looking for [SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리 힌트(Oracle Hint)란 무엇일까? … 힌트란 SQL 튜닝의 핵심 부분으로 일종의 지시 구문이다. 즉, 오라클 옵티마이저(Optimizer)에게 SQL문 실행을 위한 … [SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법 정리 💡 힌트(Oracle Hint)란 무엇일까? 힌트란 SQL 튜닝의 핵심 부분으로 일종의 지시 구문이다. 즉, 오라클 옵티마이저(Optimizer)에게 SQL문 실행을 위한..
  • Table of Contents:

태그

관련글

댓글0

최근글

인기글

최근댓글

전체 방문자

티스토리툴바

[SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리
[SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리

Read More

오라클 자주사용하는 힌트목록 정리(친절한 sql 튜닝)

  • Article author: gurume.tistory.com
  • Reviews from users: 44004 ⭐ Ratings
  • Top rated: 4.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 오라클 자주사용하는 힌트목록 정리(친절한 sql 튜닝) 오라클 힌트를 사용하는 방법. – 힌트의 규칙 /*+ (힌트명)*/ <-이 안에 힌트가 들어가야한다. - 이 범위안에 여러개의 힌트를 섞어쓸 수 있지마 힌트 ... ...
  • Most searched keywords: Whether you are looking for 오라클 자주사용하는 힌트목록 정리(친절한 sql 튜닝) 오라클 힌트를 사용하는 방법. – 힌트의 규칙 /*+ (힌트명)*/ <-이 안에 힌트가 들어가야한다. - 이 범위안에 여러개의 힌트를 섞어쓸 수 있지마 힌트 ... 0. 오라클 힌트를 사용하는 방법 - 힌트의 규칙 /*+ (힌트명)*/ - 이 범위안에 여러개의 힌트를 섞어쓸 수 있지마 힌트간의 스페이스바(공백)으로 구분해야하며 쉼표로 구분하면 힌트가 먹질 않는다. -단, 힌트안..
  • Table of Contents:

‘SQLOracle’ Related Articles

티스토리툴바

오라클 자주사용하는 힌트목록 정리(친절한 sql 튜닝)
오라클 자주사용하는 힌트목록 정리(친절한 sql 튜닝)

Read More

[오라클] Oracle 힌트(Hint) 종류, 목적, 용도및 사용법, 튜닝기법 – 율이맨의 이야기

  • Article author: yulsfamily.tistory.com
  • Reviews from users: 33504 ⭐ Ratings
  • Top rated: 3.9 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [오라클] Oracle 힌트(Hint) 종류, 목적, 용도및 사용법, 튜닝기법 – 율이맨의 이야기 오라클 힌트는 SQL 튜닝의 핵심 부분이다. 오라클이 스스로 항상 최적의 실행을 하는 것이 힘들기 때문에 힌트를 통해 직접 최적의 실행방법을 지시 … …
  • Most searched keywords: Whether you are looking for [오라클] Oracle 힌트(Hint) 종류, 목적, 용도및 사용법, 튜닝기법 – 율이맨의 이야기 오라클 힌트는 SQL 튜닝의 핵심 부분이다. 오라클이 스스로 항상 최적의 실행을 하는 것이 힘들기 때문에 힌트를 통해 직접 최적의 실행방법을 지시 … 오라클 힌트는 SQL 튜닝의 핵심 부분이다. 오라클이 스스로 항상 최적의 실행을 하는 것이 힘들기 때문에 힌트를 통해 직접 최적의 실행방법을 지시해주기 위한 것이다. 물론 무분별한 힌트의 사용은 오히려 성능..소소한 일상과 다양한 지식을 공유합니다
  • Table of Contents:
[오라클] Oracle 힌트(Hint) 종류, 목적, 용도및 사용법, 튜닝기법 - 율이맨의 이야기
[오라클] Oracle 힌트(Hint) 종류, 목적, 용도및 사용법, 튜닝기법 – 율이맨의 이야기

Read More

[Oracle] 오라클 인덱스(Index) 힌트 사용방법 (주석, 튜닝)

  • Article author: gent.tistory.com
  • Reviews from users: 13831 ⭐ Ratings
  • Top rated: 3.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Oracle] 오라클 인덱스(Index) 힌트 사용방법 (주석, 튜닝) 오라클 인덱스 힌트. SELECT절 첫 줄에 힌트 주석(/*+ */)을 작성하여 적절한 인덱스를 부여하면 된다. 주석에 꼭 “+”를 붙여야 힌트절이 실행되며 … …
  • Most searched keywords: Whether you are looking for [Oracle] 오라클 인덱스(Index) 힌트 사용방법 (주석, 튜닝) 오라클 인덱스 힌트. SELECT절 첫 줄에 힌트 주석(/*+ */)을 작성하여 적절한 인덱스를 부여하면 된다. 주석에 꼭 “+”를 붙여야 힌트절이 실행되며 … 오라클 버전이 업그레이드 되면서 옵티마이저의 성능도 많이 향상 되어 쿼리를 실행하면 최적의 인덱스를 선택하여 쿼리를 실행한다. 그러나 옵티마이저가 엉뚱한 인덱스를 선택하여 쿼리가 느려지는 경우가 있다…
  • Table of Contents:

Header Menu

Main Menu

[Oracle] 오라클 인덱스(Index) 힌트 사용방법 (주석 튜닝)

‘데이터베이스오라클’ 관련 글

Sidebar – Right

Sidebar – Footer 1

Sidebar – Footer 2

Sidebar – Footer 3

Copyright © 젠트의 프로그래밍 세상 All Rights Reserved

Designed by JB FACTORY

[Oracle] 오라클 인덱스(Index) 힌트 사용방법 (주석, 튜닝)
[Oracle] 오라클 인덱스(Index) 힌트 사용방법 (주석, 튜닝)

Read More

Oracle – 반드시 알아야 하는 오라클 힌트절 7가지 :: 외부기억장치

  • Article author: exmemory.tistory.com
  • Reviews from users: 27638 ⭐ Ratings
  • Top rated: 4.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about Oracle – 반드시 알아야 하는 오라클 힌트절 7가지 :: 외부기억장치 테이블 접근 순서를 명시적으로 표시한다(SQL문에 독립적). 접근 방법을 결정하는 힌트절 3. USE_NL ? NESTED LOOP JOIN 방식으로 조인하도록 유도한다( … …
  • Most searched keywords: Whether you are looking for Oracle – 반드시 알아야 하는 오라클 힌트절 7가지 :: 외부기억장치 테이블 접근 순서를 명시적으로 표시한다(SQL문에 독립적). 접근 방법을 결정하는 힌트절 3. USE_NL ? NESTED LOOP JOIN 방식으로 조인하도록 유도한다( … 출처: http://www.dbguide.net/knowledge.db?cmd=view&boardConfigUid=19&boardUid=183970 데이터 전문가 지식포털 DBGuide.net 이병국 [email protected] 프리랜서 DB 엔지니어. 동아제약 전산실에서 SW 개..
  • Table of Contents:

관련글 관련글 더보기

인기포스트

Oracle - 반드시 알아야 하는 오라클 힌트절 7가지 :: 외부기억장치
Oracle – 반드시 알아야 하는 오라클 힌트절 7가지 :: 외부기억장치

Read More

Oracle Hint의 정의와 종류

  • Article author: 9002.tistory.com
  • Reviews from users: 28523 ⭐ Ratings
  • Top rated: 3.0 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about Oracle Hint의 정의와 종류 Oracle Hint의 정의와 종류 … 힌트는 SQL 튜닝의 핵심부분으로 일종의 지시구문이다. SQL에 포함되어 쓰여져 Optimizer의 실행 계획을 바꿀수 있도록 말 … …
  • Most searched keywords: Whether you are looking for Oracle Hint의 정의와 종류 Oracle Hint의 정의와 종류 … 힌트는 SQL 튜닝의 핵심부분으로 일종의 지시구문이다. SQL에 포함되어 쓰여져 Optimizer의 실행 계획을 바꿀수 있도록 말 … 힌트는 SQL 튜닝의 핵심부분으로 일종의 지시구문이다. SQL에 포함되어 쓰여져 Optimizer의 실행 계획을 바꿀수 있도록 말그대로 Optimizer에게 힌트를 주는 것이다. Optiomizer라고 해서 항상 최선의 실행 계획을..
  • Table of Contents:
Oracle Hint의 정의와 종류
Oracle Hint의 정의와 종류

Read More

[ORACLE] INDEX HINT (인덱스 힌트, 주석달기, 성능 튜닝)

  • Article author: kwomy.tistory.com
  • Reviews from users: 45530 ⭐ Ratings
  • Top rated: 3.9 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [ORACLE] INDEX HINT (인덱스 힌트, 주석달기, 성능 튜닝) 실무에서 데이터베이스 관련 일을 하다보면 ‘인덱스를 탄다’ 인덱스를 안탄다’ 와 같은 말들을 들을 수 있다. 오라클 서버가 업그레이드 되면서 … …
  • Most searched keywords: Whether you are looking for [ORACLE] INDEX HINT (인덱스 힌트, 주석달기, 성능 튜닝) 실무에서 데이터베이스 관련 일을 하다보면 ‘인덱스를 탄다’ 인덱스를 안탄다’ 와 같은 말들을 들을 수 있다. 오라클 서버가 업그레이드 되면서 …  – 실무에서 데이터베이스 관련 일을 하다보면 ‘인덱스를 탄다’ 인덱스를 안탄다’ 와 같은 말들을 들을 수 있다. 오라클 서버가 업그레이드 되면서 Optimizer의 성능도 함께 향상되어 쿼리 실행시 최적의 방법으..
  • Table of Contents:

태그

댓글0

컨텐츠 글자 크기

카테고리

최근 글

인기 글

다국어 번역

방문자 통계

티스토리툴바

[ORACLE] INDEX HINT (인덱스 힌트, 주석달기, 성능 튜닝)
[ORACLE] INDEX HINT (인덱스 힌트, 주석달기, 성능 튜닝)

Read More

oracle / hint / 힌트 종류 정리

  • Article author: cofs.tistory.com
  • Reviews from users: 41079 ⭐ Ratings
  • Top rated: 4.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about oracle / hint / 힌트 종류 정리 15:49ㆍdatabase/oracle. 1. 최적화 목표(GOAL) 제어힌트. ALL_ROWS 쿼리의전체 결과를 모두 수행 하는것에 대한 최적화를 목표로 최저비용의 …
  • Most searched keywords: Whether you are looking for oracle / hint / 힌트 종류 정리 15:49ㆍdatabase/oracle. 1. 최적화 목표(GOAL) 제어힌트. ALL_ROWS 쿼리의전체 결과를 모두 수행 하는것에 대한 최적화를 목표로 최저비용의 1. 최적화 목표(GOAL) 제어힌트                   ALL_ROWS                    쿼리의전체 결과를 모두 수행 하는것에 대한                    최적화를..<< 삽질의 연속 >>
  • Table of Contents:
oracle / hint / 힌트 종류 정리
oracle / hint / 힌트 종류 정리

Read More


See more articles in the same category here: toplist.maxfit.vn/blog.

[SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리

728×90

[SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법 정리

💡 힌트(Oracle Hint)란 무엇일까?

힌트란 SQL 튜닝의 핵심 부분으로 일종의 지시 구문이다.

즉, 오라클 옵티마이저(Optimizer)에게 SQL문 실행을 위한 데이터를 스캐닝하는 경로, 조인하는 방법 등을 알려주기 위해 SQL사용자가 SQL 구문에 작성하는 것을 뜻한다. 오라클이 항상 최적의 실행 경로를 만들어 내기는 불가능하기 때문에 직접 최적의 실행 경로를 작성해 주는 것이다. 사용자가 특정 SQL 문장에서 어떤 인덱스가 선택도가 높은지 알고 있는 경우 Optimizer에 의존한 실행 계획보다 훨씬 효율적인 실행 계획을 구사할 수 있다.

단, 힌트, 인덱스, 조인의 개념을 정확히 알고 사용하지 않은 무분별한 힌트의 사용은 성능의 저하를 초래하기 때문에 잘 알고 최적의 실행 경로를 알고 있을 경우 적절하게 사용하여야 한다.

(힌트에 오타가 있는 경우는 큰 관계가 없다. 왜냐하면, 잘못 사용된 힌트는 무시되어 힌트가 없는 것처럼 동작하기 때문)

💡힌트의 쓰임과 사용방법

힌트를 사용하여 아래와 같은 것들을 할 수 있다.

액세스 경로, 조인 순서, 병렬 및 직렬 처리, Optimizer의 목표(Goal)를 변경 가능하다.

데이터 값을 정렬해야 하는 경우, 힌트의 사용이 필요하다. 참고 링크👉🏻클릭

또한, 드라이빙 테이블을 원하는 대로 선정하고자 할 때도 사용된다. 참고 링크👉🏻 클릭

드라이빙 테이블이 무엇인지 궁금하다면,

2020/03/09 – [👩‍💻TIL/DB] – [SQL 튜닝] 드라이빙 테이블(DRIVING TABLE)의 개념/결정 규칙

모든 힌트의 기본 사용법은 쿼리 서두에 힌트를 명시하는 것이다. 예를 들어 아래와 같다.

— index_asc, index 힌트 : 인덱스 영역에서 순방향으로 스캔 하라는 뜻 SELECT /*+ index_asc(e idx_myemp1_ename) */ EMPNO, ENAME, SAL FROM MYEMP1 e WHERE ENAME >= ‘가’

(앞부분에 +기호가 붙는다는 점에서 주석과의 차이 유의)

1. OPTIMIZER_MODE 지정가능 값

/*+ ALL_ROWS */

목적 : Best Throughput

용 도 : 전체 RESOURCE 소비를 최소화시키기 위한 힌트. Cost-Based 접근방식으로 ALL_ROWS는 Full Table Scan을 선호하며 CBO(Cost Based Optimization)는 default로 ALL_ROWS를 선택한다.

/*+ FIRST_ROWS */

목적 : Best Response Time

용도 : 조건에 맞는 첫 번째 row를 리턴하기 위한 Resource 소비를 최소화시키기 위한 힌트이며 Cost-Based 접근방식을 사용.

특징 – Index Scan 이 가능하다면 Optimizer가 Full Table Scan 대신 Index Scan을 선택한다.

– Index Scan 이 가능하다면 Optimizer가 Sort-Merge 보다 Nested Loop을 선택한다.

– Order By절에 의해 Index Scan이 가능하면, Sort과정을 피하기 위해 Index Scan을 선택한다.

– Delete/Update Block에서는 무시된다.

– 다음을 포함한 Select 문에서도 제외된다.

집합 연산자 (UNION, INTERSECT, MINUS, UNION ALL)

Group By

For UpDate

Group 함수

Distinct

– Full Table Scan보다는 index scan을 선호하며 Interactive Application인 경우 best response time을 제공한다

– sort merge join보다는 nested loop join을 선호한다.

/*+ CHOOSE */

목적 : access 되는 테이블에 통계치 존재 여부에 따라 Optimizer로 하여금 Rule-Based Approach와 Cost-Based Approach 중 하나를 선택할 수 있게 한다.

용 도 : Data Dictionary가 해당 테이블에 대해 통계정보를 가지고 있다면 Optimizer는 Cost-Based Approach를 선택하고, 그렇지 않다면 Rule-Based Approach를 선택한다. Hint Level의 CHOOSE는 RBO(Rule Based Optimization)인지 CBO(Cost Based Optimization) 인지를 선택한다. 만약 주어진 table의 통계 정보가 없다면 Rule Based 접근 방식을 사용한다.

/*+ RULE */

: Rule Based 접근 방식을 사용하도록 지정한다.

2. Access Methods – 접근 방법

/*+ FULL(table_name) */

: Table을 Full Scan 하길 원할 때 사용

/*+ HASH(table) */

: Hash scan을 선택하도록 지정 (HASHKEYS Parameter로 만들어진 Cluster내에 저장된 Table에만 적용)

/*+ CLUSTER(table_name) */

: Cluster Scan을 선택하도록 지정. 따라서 Clustered Object만 적용

/*+ HASH_AJ */

: NOT IN SubQuery를 HASH Anti-join으로 변형

/*+ HASH_SJ */

: Correlated Exists Subquery를 Hash Semi-join으로 변형

/*+ INDEX(table_name index_name) */

: 지정된 index를 강제적으로 쓰게끔 지정

– in list predicat에 대해서도 가능.

– Multi-column inlists는 index를 사용할 수 없다.

/*+ INDEX_COMBINE(table_name index_name) */

: Index명이 주어지지 않으면 Optimizer는 해당 테이블의 Best Cost로 선택된 Boolean Combination Index를 사용하며 Index 명이 주어지면 주어진 특정 Bitmap Index의 Boolean Combination의 사용

/*+ INDEX_ASC(table_name index_name) */

: 지정된 index를 오름차순으로 쓰게끔 지정(기본은 오름차순)

/*+ INDEX_DESC(table_name index_name) */

: 지정된 index를 내림차순으로 쓰게끔 지정

SQL> SELECT /*+ index_desc(emp pk_emp) */ empno

FROM emp

WHERE rownum = 1 ;

(위 문장은 제일 큰 것 하나만 조회되므로, max function의 기능을 대신할 수 있다.)

/*+ INDEX_FFS(table index) */

: Full table scan보다 빠른 Full index scan을 유도

/*+ ROWID(table) */

: Rowid로 Table Scan을 하도록 지정

/*+MERGE_AJ*/

: NOT IN Subquery를 Merge Anti-join으로 변형

/*+MERGE_SJ*/

: Correalted EXISTS Subquery를 Merge Semi-join으로 변형

/*+AND_EQUAL(Table Index1, Index 2…) */

: Single-Column Index의 Merge를 이용한 Access Path 선택. 적어도 두 개 이상의 Index가 지정되어야 한다. Max로 5개까지 지정 가능

/*+USE_CONCAT*/

: 조건절의 OR를 UNION ALL 형식으로 변형한다. 일반적으로 변형은 비용 측면에서 효율적일 때만 일어난다.

3. Join Orders

/*+ ORDERED */

: From절에 기술된 테이블 순서대로 join이 일어나도록 유도

/*+ STAR*/

: Star Query Plan이 사용 가능하다면 이를 이용하기 위한 Hint. Star Plan은 규모가 가장 큰 테이블이 Query에서 Join Order상 마지막으로 위치하게 하고 Nested Loop으로 Join이 일어나도록 유도한다. 적어도 3개 테이블 이상이 조인에 참여해야 하며 Large Table의 Concatenated Index는 최소 3 칼럼 이상을 Index에 포함해야 한다. 테이블이 Analyze 되어 있다면 Optimizer가 가장 효율적인 Star Plan을 선택한다.

4. Join Operations

/*+ USE_NL(table1 table 2…) */

: 테이블의 Join 시 테이블의 각 Row가 Inner 테이블을 Nested Loop 형식으로 Join 한다. 지정된 table이 inner table이 된다. ( inner table <-> driving(outer) table )

흔히 ORDERED Hint와 함께 쓴다.

/*+ USE_HASH (table_name) */

: 각 테이블 간 HASH JOIN이 일어나도록 유도한다

/*+ USE_MERGE (table_name) */

: 지정된 테이블들의 조인이 SORT-MERGE형식으로 일어나도록 유도한다.

/*+ DRIVING_SITE(table_name) */

: QUERY의 실행이 ORACLE에 의해 선택된 SITE가 아닌 다른 SITE에서 일어나도록 유도.

5. Parallel Execution

/*+ NOPARALLEL(table_name) */

: Parallel Query Option을 사용하지 않도록 할 수 있음.

/*+ PARALLEL(table_name, degree) */

: PARALLEL hint를 사용하면 query에 포함된 table의 degree를 설정할 수 있다. 예를 들어, 다음과 같이 hint를 적어 degree 4로 parallel query option을 실행하도록 할 수 있다. 이때 parallel이란 글자와 괄호( ‘(‘ ) 사이에 blank를 넣지 않도록 주의해야 함

=> DEGREE의 의미 및 결정

– Parallel Query에서 degree란 하나의 operation 수행에 대한 server process의 개수를 의미하며 이러한 degree 결정에 영향을 주는 요인들에는 다음과 같은 것들이 있다.

(1) system의 CPU 개수

(2) system의 maximum process 개수

(3) table이 striping 되어 있는 경우, 그 table이 걸쳐있는 disk의 개수

(4) data의 위치 (즉, memory에 cache 되어 있는지, disk에 있는지)

(5) query의 형태 (예를 들어 sorts 혹은 full table scan)

SQL> SELECT /*+ PARALLEL(emp, 4) */ * FROM emp;

6. Additional Hints

/*+ CACHE(table) */

: full table scan시 retrieve 된 block을 LRU list에서 most recently used end에 놓는다.

즉, memory에 오래 존재하게 한다.

/*+ NOCACHE(table) */

: full table scan시 retrieve된 block을 LRU list에서 least recently used end에 놓는다.

즉, memory에서 금방 내려가게 한다.

/*+ MERGE(view) */

: COMPLEX_VIEW_MERGING = FALSE로 되어 있을 때 view 또는 subquery의 내용을 merge가능.

/*+ NOMERGE(view) */

: COMPLEX_VIEW_MERGING = TRUE로 되어 있을 때 사용

view 또는 subquery의 내용을 merge불가능.

view 또는 subquery자체의 query문에 의한 영향을 많이 받게 됨.

/*+ PUSH_SUBQ */

: nomerged subqueries가 execution plan에서 가능한 가장 빠른 위치에서 evaluation 되도록 한다.

일반적으로, merge 되지 않은 subqueries는 execution plan에서 마지막 step으로써 수행된다.

subqueries가 상대적으로 inexpensive 하고 rows의 수를 줄일 수 있다면, subqueries를 더 일찍 evaluation 하는 것이 performance를 향상할 것이다. subquery가 remote table에 적용되거나, merge join을 사용하는 join 된 table에 적용된다면 이 hint는 적용되지 않는다.

힌트는 반드시 써야 되는 상황이 있고, 알고 제대로 쓰면 튜닝에 많은 도움이 된다. 그러나 힌트를 안 써도 대부분의 CBO에서는 데이터를 효율적으로 잘 가지고 오기 때문에 굳이 잘못 작성된 힌트로 인해 성능을 떨어 뜨리는 경우는 피해야 한다. 개발 시 주변에서 어떤 힌트를 쓰니까 빨라졌다고 해서 비슷해 보이는 쿼리에 힌트를 남발하는 것은 위험할 수 있다! 많이 공부하고 사용하자📚

728×90

오라클 자주사용하는 힌트목록 정리(친절한 sql 튜닝)

728×90

반응형

0. 오라클 힌트를 사용하는 방법

– 힌트의 규칙

/*+ (힌트명)*/ <-이 안에 힌트가 들어가야한다. - 이 범위안에 여러개의 힌트를 섞어쓸 수 있지마 힌트간의 스페이스바(공백)으로 구분해야하며 쉼표로 구분하면 힌트가 먹질 않는다. -단, 힌트안의 괄호사이에는 쉼표를 쓸 수 있다 EX) /*+ LEADING(A,B) (공백) USE_HASH(A,B) */ <--괄호안에는 쉼표사용가능 - 힌트안의 괄호에 명시되는 테이블은 ALIAS(별칭)으로 정의되어야하며, 스키마까지 포함해서 작성하지 않는다. EX) SCOTT.EMP(X), EMP OR ALIAS( A) - 힌트란 결국 올림픽대로를 타고가냐, 88고속도로 타고가냐의 문제다. 선택의 문제일 뿐 결과데이터를 바꾸진 않는다는 말이다. (하지만 조회속도는 급격하게 조절할 수있다) 1. 최적화 목표 - /*+ALL_LOWS */: 전체 처리속도 최적화 -/*+FIRST_ROWS(N) */ : 최초 N건 응답속도 최적화 2.액세스 방식 - /*+FULL */ :인덱스 타지말고 바로 테이블 풀스캔으로 접근해라 - /*+INDEX */: 인덱스를 타라 - /*+INDEX_DESC */: 인덱스를 ORDER BY DESC 역순으로 타라 (시간, 결과값등 최근인것 혹은 MAX값 구할때 좋음) - /*+INDEX_FFS */: INDEX FAST FULL SCAN으로 타라 - /*+INDEX_SS */: INDEX SKIP SCAN 3. 조인순서 - /*+ORDERED */: FROM절에 나열된 테이블 순서대로 조인해라 - /*+LEADING */: 내가 힌트절에 열거한 테이블 순서대로 조인해라 EX: /*+ LEADING (A B C)*/ -- A,B,C 순서대로 조인하세요 - /*+SWAP_JOIN_INPUTS */: 해시조인의 경우, BUILD INPUT를 명시적으로 선택 EX: /*+ SWAP_JOIN_INPUTS(A)*/ --해시조인의경우 BUILD INPUT과 PROBE에 대한 순서를 정할 수 있다. 4. 조인방식 - /*+USE_NL */ :NL(NESTED LOOP - 중첩루프)방식 조인 유도 - /*+USE_MERGE */: 소트머지 조인으로 유도 - /*+USE_HASH */: 해시조인으로 유도 -/*+NL_SJ */: NL SEMI조인으로 유도 -/*+MERGE_SJ */: 소트머지 세미조인으로 유도 -/*+HASH_SJ */: 해시 세미조인으로 유도 5. 서브쿼리팩토링 - /*+MATERIALIZE */: WITH문으로 정의한 집합을 물리적으로 생성하도록 유도 EX) WITH /*+ MATERIALIZE*/ T AS (SELECT ...) - /*+INLINE */: WITH문으로 정의한 집합을 물리적으로 생성하지않고 INLINE 처리하도록 유도 EX)WITH /*+ INLINE*/ T AS (SELECT ...) 6.쿼리변환 - /*+ MEERGE */: 뷰 머징 유도 - /*+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방지 7.병렬처리 - /*+PARALLEL */: 테이블 스캔, DML 병렬방식으로 처리하도록 할때 사용.. 단일 대형 테이블의 접근시 정말 많이 쓴다. EX) /*+ PARALLEL(T1 4)*/ - /*+PARALLEL_INDEX */: 인덱스 스캔을 병렬방식으로 처리하도록 유도 - /*+PQ_DISTRIBUTE */: 병렬수행시 데이터 분배방식 결정 EX) PQ_DISTRIBUTE(T1 HASH(--BUILD INPUT) HASH(--PROBE TABLE)) 8. 그외 기타 - /*+APPEND*/: DIRECT PATH INSERT유도로 INSERT 문에 주로 많이 쓴다 - /*+DRIVING_SITE */: DB LINK REMOTE쿼리에 대한 최적화 및 실행 주체 지정 (LOCAL 또는 REMOTE) - /*+PUSH_SUBQ */: 서브쿼리를 가급적 빨리 필터링하도록 유도 - /*+NO_PUSH_SUBQ */: 서브쿼리를 가급적 늦게 필터링 하도록 유도 728x90

[오라클] Oracle 힌트(Hint) 종류, 목적, 용도및 사용법, 튜닝기법

오라클 힌트는 SQL 튜닝의 핵심 부분이다.

오라클이 스스로 항상 최적의 실행을 하는 것이 힘들기 때문에 힌트를 통해 직접 최적의 실행방법을

지시해주기 위한 것이다.

물론 무분별한 힌트의 사용은 오히려 성능의 저하를 초래하기 때문에 힌트를 잘 알고 적절하게 사용하기 바란다.

■ 힌트절의 형태

/*+ hint */

/*+ hint(argument) */

■ 힌트의 종류

-옵티마이저의 목표에 따른 힌트

-접근 경로에 따른 힌트

-쿼리 변환에 따른 힌트

-조인 순서에 따른 힌트

-조인 방법에 따른 힌트

1. 옵티마이저의 목표에 따른 힌트

/*+ ALL_ROWS */

: 질의의 모든 결과를 반환하는 힌트 /*+ FIRST_ROWS */

: 조건에 맞는 첫 번째 row를 반환하고 Resource 소비를 최소화

: Cost-Based 접근방식을 사용.

: 집합 연산자 (UNION, INTERSECT, MINUS, UNION ALL), Group 함수 에서는 제외 /*+ CHOOSE */ : 통계정보에 따라 최적화 방법을 옵티마이저가 RBO와 CBO 중 하나를 선택 RBO(Rule Based Optimization), CBO(Cost Based Optimization)

2. 접근 경로에 따른 힌트

/*+ FULL(table_name) */

: Table을 Full Scan /*+ CLUSTER(table_name) */

: Table을 Cluster Scan /*+ HASH(table) */

: Table을 Hash scan /*+ INDEX(table_name index_name) */

: Table을 index scan /*+ NO_INDEX(table_name index_name) */

: index scan을 사용하지 않음 /*+ INDEX_COMBINE(table_name index_name) */

: Table의 비트맵 접근 경로 사용 /*+ INDEX_FFS(table index) */

: fats full index scan 사용 /*+ INDEX_ASC(table_name index_name) */

: Table을 오름차순으로 index scan /*+ INDEX_DESC(table_name index_name) */

: Table을 내림차순으로 index scan /*+ INDEX_SS(table_name index_name) */

: index skip scan 사용

3. 쿼리 변환에 따른 힌트

/*+ NO_QUERY_TRANSFORMATION */ : 쿼리를 변환하지 않음 /*+ USE_CONCAT */ : OR 조건을 UNION ALL 로 변환 /*+ NO_EXAPAND */ : OR 조건을 UNION ALL 로 변환하지 않음 /*+ REWRITE */ : MView에 대해 쿼리를 다시 작성 /*+ MERGE */ : 쿼리에 사용된 뷰들을 병합 /*+ UNNEST*/ : 서브쿼리를 조인 문으로 변환

4. 조인 순서에 따른 힌트

/*+ LEADING(table_name1, …_) */ : 파라미터에 명시된 순서대로 테이블 조인 /*+ ORDERED */ : FROM 절에 명시된 순서대로 조인

5. 조인 방법에 따른 힌트

/*+ USE_NL (table_name) */ : Nested Loop Join 사용 /*+ USE_NL_WIDTH_INDEX (table_index) */ : 인덱스를 이용한 Nested Loop Join 사용 /*+ USE_MERGE (table_name) */ : 머지 조인(Merge Join)이 일어나도록 유도하며, SORT를 동반하므로 SORT MERGE JOIN /*+ USE_HASH (table_name) */ : Hash Join을 사용

■ 일반적인 SQL 튜닝 기법

1. 바인드 변수를 사용한다. : 상수 값이 변경되어도 이전 질의를 사용함으로 최적화 실행단계를 줄인다. 2. 가급적 WHERE 절의 조건에 인덱스 컬럼을 모두 사용한다. 3. 인덱스 컬럼에 사용하는 연산자는 가급적 = 을 사용한다. 4. 인덱스 컬럼은 변형을 사용하지 않는다. 5. OR 보다는 AND를 사용한다. 6. HAVING 보다는 가급적 WHERE 절에서 데이터를 필터링 한다. 7. DISTINCT 는 가급적 사용하지 않는다.

So you have finished reading the 오라클 힌트 topic article, if you find this article useful, please share it. Thank you very much. See more: 오라클 힌트 PARALLEL, 오라클 힌트 예제, 오라클 힌트 LEADING, 오라클 힌트 INDEX_FFS, 오라클 힌트 FULL PARALLEL, 오라클 힌트 ordered, 오라클 힌트 all_rows, 오라클 힌트 여러개

Leave a Comment