You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 오라클 힌트 index 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: 오라클 힌트 index 오라클 힌트 LEADING, 오라클 힌트 INDEX 여러개, 인덱스 힌트 안탈때, 인덱스 힌트 여러개, 오라클 인덱스 강제로 태우기, 오라클 인덱스 타는지 확인, 오라클 힌트 종류, 오라클 인덱스 조회
[Oracle] 오라클 인덱스(Index) 힌트 사용방법 (주석, 튜닝)
- Article author: gent.tistory.com
- Reviews from users: 38477 Ratings
- Top rated: 4.7
- Lowest rated: 1
- Summary of article content: Articles about [Oracle] 오라클 인덱스(Index) 힌트 사용방법 (주석, 튜닝) 오라클 버전이 업그레이드 되면서 옵티마이저의 성능도 많이 향상 되어 쿼리를 실행하면 최적의 인덱스를 선택하여 쿼리를 실행한다. …
- Most searched keywords: Whether you are looking for [Oracle] 오라클 인덱스(Index) 힌트 사용방법 (주석, 튜닝) 오라클 버전이 업그레이드 되면서 옵티마이저의 성능도 많이 향상 되어 쿼리를 실행하면 최적의 인덱스를 선택하여 쿼리를 실행한다. 오라클 버전이 업그레이드 되면서 옵티마이저의 성능도 많이 향상 되어 쿼리를 실행하면 최적의 인덱스를 선택하여 쿼리를 실행한다. 그러나 옵티마이저가 엉뚱한 인덱스를 선택하여 쿼리가 느려지는 경우가 있다…
- 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 HINT (인덱스 힌트, 주석달기, 성능 튜닝)
- Article author: kwomy.tistory.com
- Reviews from users: 40385 Ratings
- Top rated: 4.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
컨텐츠 글자 크기
카테고리
최근 글
인기 글
다국어 번역
방문자 통계
티스토리툴바
[SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리
- Article author: devuna.tistory.com
- Reviews from users: 20329 Ratings
- Top rated: 3.3
- Lowest rated: 1
- Summary of article content: Articles about [SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리 모든 힌트의 기본 사용법은 쿼리 서두에 힌트를 명시하는 것이다. 예를 들어 아래와 같다. — index_asc, index 힌트 : 인덱스 영역에서 순방향으로 스캔 … …
- Most searched keywords: Whether you are looking for [SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리 모든 힌트의 기본 사용법은 쿼리 서두에 힌트를 명시하는 것이다. 예를 들어 아래와 같다. — index_asc, index 힌트 : 인덱스 영역에서 순방향으로 스캔 … [SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법 정리 💡 힌트(Oracle Hint)란 무엇일까? 힌트란 SQL 튜닝의 핵심 부분으로 일종의 지시 구문이다. 즉, 오라클 옵티마이저(Optimizer)에게 SQL문 실행을 위한..
- Table of Contents:
태그
관련글
댓글0
최근글
인기글
최근댓글
전체 방문자
티스토리툴바
Oracle Hint의 정의와 종류
- Article author: 9002.tistory.com
- Reviews from users: 20122 Ratings
- Top rated: 5.0
- Lowest rated: 1
- Summary of article content: Articles about Oracle Hint의 정의와 종류 힌트는 SQL 튜닝의 핵심부분으로 일종의 지시구문이다. … 오라클 힌트 종류 … HINT. 내용. 사용법. INDEX. INDEX를 순차적으로 스캔. …
- Most searched keywords: Whether you are looking for Oracle Hint의 정의와 종류 힌트는 SQL 튜닝의 핵심부분으로 일종의 지시구문이다. … 오라클 힌트 종류 … HINT. 내용. 사용법. INDEX. INDEX를 순차적으로 스캔. 힌트는 SQL 튜닝의 핵심부분으로 일종의 지시구문이다. SQL에 포함되어 쓰여져 Optimizer의 실행 계획을 바꿀수 있도록 말그대로 Optimizer에게 힌트를 주는 것이다. Optiomizer라고 해서 항상 최선의 실행 계획을..
- Table of Contents:
[오라클힌트강좌]INDEX,INDEX_COMBINE,INDEX_DESC,액세스경로(Access Path)관련힌트,오라클자바커뮤니티SQL교육
- Article author: ojc.asia
- Reviews from users: 907 Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about [오라클힌트강좌]INDEX,INDEX_COMBINE,INDEX_DESC,액세스경로(Access Path)관련힌트,오라클자바커뮤니티SQL교육 INDEX, INDEX_ASC 힌트의 반대로 인덱스 영역에서 생성된 인덱스의 역순으로 스캐닝 하라는 의미로 데이터 값을 역순 정렬하라는 의미는 아니다. …
- Most searched keywords: Whether you are looking for [오라클힌트강좌]INDEX,INDEX_COMBINE,INDEX_DESC,액세스경로(Access Path)관련힌트,오라클자바커뮤니티SQL교육 INDEX, INDEX_ASC 힌트의 반대로 인덱스 영역에서 생성된 인덱스의 역순으로 스캐닝 하라는 의미로 데이터 값을 역순 정렬하라는 의미는 아니다. OJC,OJCEDU,OJC.ASIA,오라클초보에서Schema Object까지,PL/SQL힌트튜닝,오라클자바교육,자바학원교육,오라클학원교육,닷넷학원교육,안드로이드교육,오라클자바학원,오라클자바커뮤니티교육센터,ORACLE12실무교육, JAVA8실무교육, 스프링4 실무교육학원, 자바8실무교육학원, 오라클12실무교육학원,오라클학원,자바학원,닷넷학원,안드로이드학원,스마트폰앱개발학원,개발자실무교육,프로그래머실무교육,오라클자바,빅데이터,오라클자바커뮤니티,자바커뮤니티,오라클커뮤니티,하둡, ORACLE, JAVA, BigData, HaDoop, ORACLEJAVA, .NET, 닷넷, C#, ASP.NET교육, C#교육,오라클교육, 자바교육, 빅데이터교육, 하둡교육, 빅데이터학원, 하둡학원, Android, 안드로이드강좌, 안드로이드교육, 아이폰강좌,아이폰교육,SQL강좌, BigData학원, Hadoop학원, BigData교육, HaDoop교육, SQL교육, Spring교육,Struts교육,Spring3, Spring3.2, AJAX교육, jQUERY교육, HTML,JAVASCRIPT,HTML5,jQUERY실무교육,jQUERY Mobile, 제이쿼리모바일, 오라클,자바,닷넷,안드로이드,아이폰,오라클자바교육,오라클교육,자바교육,닷넷교육,Ajax, jQueryOJC,OJCEDU,OJC.ASIA,오라클초보에서Schema Object까지,PL/SQL힌트튜닝,오라클자바커뮤니티교육센터,자바학원교육,오라클학원교육,닷넷학원교육,오라클자바,안드로이드학원,오라클학원,자바학원,닷넷학원,안드로이드학원,스마트폰앱개발학원,ORACLE12실무교육, JAVA8실무교육, 스프링4 실무교육학원, 자바8실무교육학원, 오라클12실무교육학원,개발자실무교육,프로그래머실무교육,빅데이터, 오라클자바강좌, 하둡, 하둡교육, 오라클자바교육, 닷넷교육, 빅데이터교육, 자바오라클, C#교육, ASP.NET교육, BigData, HaDoop, ORACLEJAVA, 오라클강좌팁, 자바강좌팁, BigData교육, HaDoop교육, HTML,JAVASCRIPT,HTML5,jQUERY실무교육,빅데이터학원, jQUERY Mobile, 제이쿼리모바일,하둡학원, 오라클,안드로이드, Android, 자바,오라클닷넷,닷넷,아이폰,안드로이드 교육,강좌, BigData학원, HaDoop학원, ORACLE, JAVA, ORACLEJAVA, STRUTS, SPRING, ANDROID, IOS[오라클힌트강좌]INDEX,INDEX_COMBINE,INDEX_DESC,액세스경로(Access Path)관련힌트,오라클자바커뮤니티SQL교육 15.4 Hints For Access Paths(INDEX, INDEX_COMBINE) 테이블에 있는 인덱스를 사용할 수 있도록 해주는 구문으로 비트맵 인덱스에 대해서도 사용이 가능하지만 Bitmap …
- Table of Contents:
Oracle index hint syntax
- Article author: www.dba-oracle.com
- Reviews from users: 2302 Ratings
- Top rated: 3.1
- Lowest rated: 1
- Summary of article content: Articles about Oracle index hint syntax Oracle index hint syntax. Oracle Database Tips by Donald BurlesonJuly 28, 2015. Question: I added an index hint in my query, … …
- Most searched keywords: Whether you are looking for Oracle index hint syntax Oracle index hint syntax. Oracle Database Tips by Donald BurlesonJuly 28, 2015. Question: I added an index hint in my query, … Oracle index hint syntax Oracle index hint syntax
- Table of Contents:
오라클 자주사용하는 힌트목록 정리(친절한 sql 튜닝)
- Article author: gurume.tistory.com
- Reviews from users: 5399 Ratings
- Top rated: 3.1
- Lowest rated: 1
- Summary of article content: Articles about 오라클 자주사용하는 힌트목록 정리(친절한 sql 튜닝) 오라클 힌트를 사용하는 방법. – 힌트의 규칙 … /*+FULL */ :인덱스 타지말고 바로 테이블 풀스캔으로 접근해라. – /*+INDEX */: 인덱스를 타라. …
- Most searched keywords: Whether you are looking for 오라클 자주사용하는 힌트목록 정리(친절한 sql 튜닝) 오라클 힌트를 사용하는 방법. – 힌트의 규칙 … /*+FULL */ :인덱스 타지말고 바로 테이블 풀스캔으로 접근해라. – /*+INDEX */: 인덱스를 타라. 0. 오라클 힌트를 사용하는 방법 – 힌트의 규칙 /*+ (힌트명)*/ – 이 범위안에 여러개의 힌트를 섞어쓸 수 있지마 힌트간의 스페이스바(공백)으로 구분해야하며 쉼표로 구분하면 힌트가 먹질 않는다. -단, 힌트안..
- Table of Contents:
‘SQLOracle’ Related Articles
티스토리툴바
SQL – 인덱스 원리, 힌트
- Article author: loklee9.tistory.com
- Reviews from users: 5918 Ratings
- Top rated: 3.1
- Lowest rated: 1
- Summary of article content: Articles about SQL – 인덱스 원리, 힌트 나 취준생/SQL의 다른 글. SQL – 인덱스 오라클 데이터 베이스의 객체(object)의 종류 5가지 1. table : 데이터를 … …
- Most searched keywords: Whether you are looking for SQL – 인덱스 원리, 힌트 나 취준생/SQL의 다른 글. SQL – 인덱스 오라클 데이터 베이스의 객체(object)의 종류 5가지 1. table : 데이터를 … 데이터베이스를 배울 때 인덱스(INDEX)를 알아야 하는 이유 : 인덱스를 알아야 빠르게 데이터를 검색할 수 있고, 속도는 현업에서 매우 매우 중요하다. 20분 —> 0.01초 : 쉬운 SQL 튜닝 0.1 —> 0.01..
- Table of Contents:
‘나 취준생SQL’ Related Articles
티스토리툴바
오라클 힌트 강좌#8 : 인덱스 영역에서 데이터를 스캐닝 하기 위한 힌트(INDEX, INDEX_ASC, INDEX_DESC힌트), 인덱스를 잘다루면 쿼리가 편해져요~ : 네이버 블로그
- Article author: m.blog.naver.com
- Reviews from users: 33564 Ratings
- Top rated: 4.0
- Lowest rated: 1
- Summary of article content: Articles about 오라클 힌트 강좌#8 : 인덱스 영역에서 데이터를 스캐닝 하기 위한 힌트(INDEX, INDEX_ASC, INDEX_DESC힌트), 인덱스를 잘다루면 쿼리가 편해져요~ : 네이버 블로그 INDEX 힌트와 동일한데 인덱스가 생성된 형태대로 인덱스를 스캔 하라는 의미의 힌트이다. 이 힌트를 이용하여 데이터를 추출하게 되면 화면에 … …
- Most searched keywords: Whether you are looking for 오라클 힌트 강좌#8 : 인덱스 영역에서 데이터를 스캐닝 하기 위한 힌트(INDEX, INDEX_ASC, INDEX_DESC힌트), 인덱스를 잘다루면 쿼리가 편해져요~ : 네이버 블로그 INDEX 힌트와 동일한데 인덱스가 생성된 형태대로 인덱스를 스캔 하라는 의미의 힌트이다. 이 힌트를 이용하여 데이터를 추출하게 되면 화면에 …
- Table of Contents:
카테고리 이동
풀스택개발자(httpojcasia)
이 블로그
SQL힌트튜닝
카테고리 글
카테고리
이 블로그
SQL힌트튜닝
카테고리 글
[오라클] 인덱스 힌트 사용방법(Oracle index hint) :: 나의 일상이다반사
- Article author: anomiea.tistory.com
- Reviews from users: 29971 Ratings
- Top rated: 4.3
- Lowest rated: 1
- Summary of article content: Articles about [오라클] 인덱스 힌트 사용방법(Oracle index hint) :: 나의 일상이다반사 [오라클] 인덱스 힌트 사용방법(Oracle index hint) … bitmap join 인덱스 등이 사용될 수 있으나, bitmap 인덱스 들의 사용 시, INDEX 힌트보다는. …
- Most searched keywords: Whether you are looking for [오라클] 인덱스 힌트 사용방법(Oracle index hint) :: 나의 일상이다반사 [오라클] 인덱스 힌트 사용방법(Oracle index hint) … bitmap join 인덱스 등이 사용될 수 있으나, bitmap 인덱스 들의 사용 시, INDEX 힌트보다는. INDEX /*+ INDEX (table index [index] [index] … ) */ – 지정한 테이블의 인덱스 스캔을 실행하도록 유도합니다. – Domain, B-tree, bitmap, bitmap join 인덱스 등이 사용될 수 있으나, bitmap 인덱스 들의 사..나의일상, 아이일상(유주:13년6월,도윤:16년4월), 리니지2 알하나 스토리, IT업무
- Table of Contents:
See more articles in the same category here: toplist.maxfit.vn/blog.
[Oracle] 오라클 인덱스(Index) 힌트 사용방법 (주석, 튜닝)
오라클 버전이 업그레이드 되면서 옵티마이저의 성능도 많이 향상 되어 쿼리를 실행하면 최적의 인덱스를 선택하여 쿼리를 실행한다. 그러나 옵티마이저가 엉뚱한 인덱스를 선택하여 쿼리가 느려지는 경우가 있다.
실무에서 쿼리문를 작성하다보면 “인덱스가 안탄다”, “인덱스를 태워야한다” 와 같은 얘기를 많이 듣는다. 아래는 어떻게 인덱스를 태워야하는지 간단히 정리한 내용이다.
오라클 인덱스 힌트
SELECT절 첫 줄에 힌트 주석(/*+ */)을 작성하여 적절한 인덱스를 부여하면 된다. 주석에 꼭 “+”를 붙여야 힌트절이 실행되며 “+”가 없으면 일반 주석으로 간주하고 아무런 이벤트가 없다.
SELECT /*+ INDEX(a EMP_IDX02) */ a.empno , a.ename , a.hiredate FROM emp a
인덱스 힌트 간단 정리
적절한 인덱스 힌트를 사용하면 쿼리의 수행 속도를 향상시킨다
ORDER BY를 사용하지 않아도 인덱스의 컬럼 순서로 정렬되어 조회된다
INDEX (INDEX_ASC) : 오름차순 정렬, INDEX_DESC : 내림차순 정렬
(INDEX_ASC) : 오름차순 정렬, : 내림차순 정렬 멀티라인 주석 ( /*+ */ )과 싱글라인 주석( –+ ) 모두 인덱스 힌트를 사용할 수 있다
)과 싱글라인 주석( ) 모두 인덱스 힌트를 사용할 수 있다 여러개의 복한 인덱스 힌트를 사용할 수 있다 ( /*+ INDEX(…..) INDEX(…..) */ )
테이블 인덱스 명 조회 쿼리
SELECT a.table_name , a.index_name , a.column_position , a.column_name FROM user_ind_columns a WHERE a.table_name = ‘EMP’ –테이블명 ORDER BY a.index_name, a.column_position
EMP_IDX02 인덱스는 HIREDATE, DEPTNO 컬럼으로 구성되어 있으며 WHERE절에 HIREDATE 기준으로 데이터를 조회할 경우 사용한다. 만약 EMPNO로 조회한다면 EMP_PK 인덱스를 사용해야 한다.
인덱스는 정의된 컬럼의 순서대로 정렬되어 별도의 영역에 저장되어 있다. 그리고 인덱스를 사용할 경우 테이블에서 직접 조회하지 않고 인덱스 영역에서 빠르게 조회한 후 실제 테이블에서 해당 데이터를 찾는다.
쿼리 툴에서 실행 계획 보기
아래는 Oracle SQL Developer 쿼리 툴에서 실행 계획을 확인하는 장면이다. 대부분의 쿼리 툴에는 실행 계획을 확인하는 기능이 있으니, 인덱스를 타고 있는지 꼭 확인해야 한다.
사용 예제
예제 1 – 일반적인 인덱스 힌트를 사용하는 방법
예제 2 – 인덱스 컬럼의 역순으로 데이터를 조회하는 방법
ORDER BY를 사용하지 않고 인덱스 힌트를 사용하여 내림차순으로 정렬할 수 있다
예제 3 – 복한 인덱스 힌트를 부여하는 방법
여러개의 테이블을 조인하여 쿼리를 작성할 경우 인덱스 힌트를 여러개 부여할 수 있다
예제 4 – 인덱스 힌트 사용 시 테이블 명을 사용하는 방법
테이블 별칭이 없을경우 테이블 명을 사용할 수 있으나 되도록 테이블 별칭 사용을 권장한다
예제 5 – 싱글라인 주석 힌트 절 사용 방법
[ORACLE] INDEX HINT (인덱스 힌트, 주석달기, 성능 튜닝)
반응형
– 실무에서 데이터베이스 관련 일을 하다보면 ‘인덱스를 탄다’ 인덱스를 안탄다’ 와 같은 말들을 들을 수 있다. 오라클 서버가 업그레이드 되면서 Optimizer의 성능도 함께 향상되어 쿼리 실행시 최적의 방법으로 실행해준다. 하지만 Optimizer가 항상 최적의 실행 경로를 만들어내는 것은 불가능하기 때문에 직접 실행경로를 작성해 주어야 하는 경우가 생긴다. 따라서 DBA는 느린 쿼리나 성능 튜닝을 위해 Optimizer가 적절한 인덱스를 타고 있는지 확인하는 절차가 필요하다. 한 쿼리에서 어떤 인덱스의 선택도가 높은지 파악하고 Optimizer에 의존한 실행계획보다 효율적인 실행 계획을 만들어 내어야 한다.
– 힌트, 인덱스, 조인 등의 개념을 명확히 알지 않은 상태에서 무분별한 힌트의 사용은 데이터베이스 전체 성능의 저하를 일으킬 수 있다. (힌트에 오타가 있는 경우에는 오라클 서버가 잘못 사용된 힌트로 판단하여 힌트절을 무시하고 힌트 없이 쿼리를 수행한다)
* 사용법
오라클 인덱스 힌트 사용 문법
– SELECT 첫 줄에 힌트 주석을 작성하여 적절한 인덱스를 사용하도록 유도한다. ( /*+ ….. */ ) 힌트 사용시 ORDER BY를 사용하지 않아도 인덱스 컬럼 순서로 정렬되어 조회된다.
– INDEX_ASC : 오름차순 인덱스 정렬
– INDEX_DESC : 내림차순 인덱스 정렬
– 싱글라인 주석 ( –+ ) , 멀티라인 주석 ( /*+ …. */ ) 모두 인덱스를 사용할 수 있다.
– 여러개의 복합 인덱스 힌트를 사용할 수 있다. ( /*+ INDEX(….) INDEX(….) */ )
* 테이블의 인덱스 조회
SELECT a.table_name , a.index_name , a.column_position , a.column_name FROM user_ind_columns a WHERE a.table_name = ‘[테이블명]’ ORDER BY a.index_name, a.column_position
– 위 예시의 EMP 테이블의 EMP_IDX02 인덱스는 COLUMN_POSITION를 기준으로 HIREDATE, DEPTNO 두개의 컬럼으로 구성되어 있다. 인덱스는 정의된 컬럼 순서대로 정렬되어 별도 지정된 영역에 저장되어 있다. 인덱스를 사용하게 되면 테이블에 바로 접근하지 않고 인덱스 영역에서 빠르게 ROWID를 찾아낸 후 실제 테이블에서 해당하는 데이터를 찾는다.
* 사용예제
– 인덱스 힌트절에 테이블명 또는 테이블 별칭을 사용할 수 있으나 되도록이면 테이블 별칭 사용을 권장함.
1. 일반적인 인덱스 힌트 사용
SELECT /*+ INDEX(EMP EMP_IDX02) */ EMP.empno, EMP.ename, EMP.hiredate FROM EMP WHERE hiredate BETWEEN TO_DATE(‘1981-01-01’, ‘YYYY-MM-DD’) AND TO_DATE(‘1981-12-31’, ‘YYYY-MM’DD’);
2. 인덱스 컬럼 역순으로 데이터 조회
SELECT /*+ INDEX_DESC(EMP EMP_IDX02) */ EMP.empno, EMP.ename, EMP.hiredate FROM EMP WHERE hiredate BETWEEN TO_DATE(‘1981-01-01’, ‘YYYY-MM-DD’) AND TO_DATE(‘1981-12-31’, ‘YYYY-MM’DD’);
3. 복합 인덱스 힌트 사용
SELECT /*+ INDEX(a EMP_PK) INDEX_DESC(b DEPT_PK) */ , a.empno , a.ename , a.hiredate , b.deptno , b.dname FROM emp a, dept b WHERE a.empno = ‘7989’ AND a.deptno = b.deptno;
4. 싱글라인 주석 힌트 사용
SELECT –+ INDEX(EMP EMP_IDX02) EMP.empno, EMP.ename, EMP.hiredate FROM EMP WHERE hiredate BETWEEN TO_DATE(‘1981-01-01’, ‘YYYY-MM-DD’) AND TO_DATE(‘1981-12-31’, ‘YYYY-MM’DD’);
5. 비트맵 인덱스에서만 적용가능한 힌트
SELECT /*+ INDEX_COMBINE(E) */ * FROM EMP E WHERE ename = ‘SMITH’ AND deptno = 10; Execution Plan ——————————————————————- SELECT STATEMENT Optimizer=CHOOSE TABLE ACCESS (BY INDEX ROWID) OF ‘EMP’ BITMAP CONVERSION (TO ROWIDS) BITMAP AND BITMAP INDEX (SINGLE VALUE) OF ‘bidx_emp_ename’ BITMAP INDEX (SINGLE VALUE) OF ‘bidx_emp_deptno’;
– 해당 테이블에 비트맵 인덱스가 존재하면, 비트맵 인덱스를 통한 접근을 유도한다.
– INDEX명이 주어지지 않으면 Optimizer는 해당 테이블의 Best Cost로 선택된 Boolean Combination Index를 사용하며 INDEX명이 주어지면 주어진 특정 Bitmap Index의 Boolean Combination의 사용
반응형
[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
So you have finished reading the 오라클 힌트 index topic article, if you find this article useful, please share it. Thank you very much. See more: 오라클 힌트 LEADING, 오라클 힌트 INDEX 여러개, 인덱스 힌트 안탈때, 인덱스 힌트 여러개, 오라클 인덱스 강제로 태우기, 오라클 인덱스 타는지 확인, 오라클 힌트 종류, 오라클 인덱스 조회