힌트
SQL 문장에 힌트를 추가하여 Tibero의 질의 최적화기에 특정 행동을 지시하거나 실행 계획을 변경하는 방법을 소개합니다.
힌트는 일종의 지시문 입니다.
SQL 문장에 힌트를 추가하여 Tibero의 질의 최적화기(Optimizer)에 특정 행동을 지시하거나 질의 최적화기의 실행 계획을 변경합니다.
질의 최적화기가 항상 최적의 실행 계획을 수립할 수는 없으므로 개발자가 질의 최적화기의 실행 계획을 직접 수정할 수 있는 방법을 마련한 것이 바로 힌트입니다. SQL 문장의 한 블록당 힌트는 하나만 올 수 있으며, SELECT, UPDATE, INSERT, DELETE 절 바로 뒤에 위치해야 합니다.
힌트사용예시
(DELETE|INSERT|SELECT|UPDATE) /*+ hint [hint] ... */
또는
(DELETE|INSERT|SELECT|UPDATE) --+ hint [hint] ...힌트를 사용할 때 주의할 점은 다음과 같습니다.
힌트는 반드시 DELETE, INSERT, SELECT, UPDATE 절 뒤에만 올 수 있습니다.
'+' 기호는 반드시 주석 구분자('/*' 또는 '--') 바로 뒤에 공백 없이 붙여 써야 합니다.
힌트와 '+' 기호 사이에 공백은 있거나 없어도 됩니다.
문법에 맞지 않는 힌트는 주석으로 취급되며, 오류는 발생하지 않습니다.
다음은 힌트의 종류입니다.
질의 변형
NO_QUERY_TRANSFORMATION
질의 변형기에게 전체 쿼리에 대해서 변형을 실행하지 않도록 지시
NO_MERGE
질의 변형기에게 특정 뷰에 대한 뷰 병합(View Merging)
을 하지 않도록 지시
UNNEST
질의 변형기에게 특정 부질의를 언네스팅(Unnesting)하도록 지시
NO_UNNEST
질의 변형기에게 특정 부질의에 대해 언네스팅을 수행하지 않도록 지시
NO_JOIN_ELIMINATION
질의 변형기에게 조인 제거를 수행하지 않도록 지시
S TAR_TRANSFORMA TION
질의 변형기에게 스타 변형(Star Transformation)을 하도록 지시
최적화 방법
ALL_ROWS
전체 결과에 대한 처리량이 가장 많도록 처리과정의 최적화 선택
FIRST_ROWS
결과를 가장 빠르게 보여줄 수 있도록 결과 표시의 최적화 선택
접근 방법
FULL
전체 테이블을 스캔하도록 지시
INDEX
명시한 인덱스를 사용한 인덱스 스캔을 하도록 지시
NO_INDEX
명시한 인덱스를 사용한 인덱스 스캔을 하지 않도록 지시.
INDEX_ASC
명시한 인덱스를 사용한 인덱스 스캔을 오름차순으로 하도록 지시
INDEX_DESC
명시한 인덱스를 사용한 인덱스 스캔을 내림차순으로 하도록 지시
INDEX_FFS
명시한 인덱스를 사용한 인덱스를 사용해 빠른 전체 인덱스 스캔(Fast Full Index Scan)을 하도록 지시
NO_INDEX_FFS
명시한 인덱스를 사용한 빠른 전체 인덱스 스캔을 하지 않도록 지시
INDEX_RS
명시한 인덱스를 사용한 인덱스를 사용해 범위 인덱스 스캔(Range Index Scan)을 하도록 지시
NO_INDEX_RS
명시한 인덱스를 사용한 범위 인덱스 스캔을 하지 않도록 지시
INDEX_SS
명시한 인덱스를 사용한 인덱스를 사용해 인덱스 스킵 스캔(Index Skip Scan)을 하도록 지시
NO_INDEX_SS
명시한 인덱스를 사용한 인덱스 스킵 스캔을 하지 않도록 지시
INDEX_JOIN
명시한 테이블에 두 개 이상의 인덱스를 사용하여 자체 조인(Self Join)하도록 지시
조인 순서
LEADING
먼저 조인되어야 할 테이블의 집합을 명시
ORDERED
테이블을 FROM 절에 명시된 순서대로 조인하도록 지시
조인 방법
NO_USE_NL
중첩 루프 조인을 사용하지 않도록 지시
USE_NL_WITH_INDEX
명시한 인덱스와 두 테이블에 대한 조인 조건을 이용해 중첩 루프 조인을 사용하도록 지시
USE_MERGE
합병 조인을 사용하도록 지시
NO_USE_MERGE
합병 조인을 사용하지 않도록 지시
USE_HASH
해시 조인을 사용하도록 지시
NO_USE_HASH
해시 조인을 사용하지 않도록 지시
HASH_SJ
부질의를 언네스팅할 때 해시방법을 이용한 세미조인으 로 하도록 지시
HASH_AJ
부질의를 언네스팅할 때 해시방법을 이용한 안티조인으 로 하도록 지시
MERGE_SJ
부질의를 언네스팅할 때 머지방법을 이용한 세미조인으 로 하도록 지시
MERGE_AJ
부질의를 언네스팅할 때 머지방법을 이용한 안티조인으 로 하도록 지시
NL_SJ
부질의를 언네스팅할 때 네스티드 룹 방법을 이용한 세미 조인으로 하도록 지시
NL_AJ
부질의를 언네스팅할 때 네스티드 룹 방법을 이용한 안티 조인으로 하도록 지시
SWAP_JOIN_INPUTS
해시 조인을 수행하는 경우 빌드 테이블이 되도록 지시
NO_SWAP_JOIN_INPUTS
해시 조인을 수행하는 경우 조인 순서가 변경되지 않도록 지시
병렬처리
PARALLEL
지정한 개수의 스레드를 사용해 질의의 수행을 병렬로 진행하도록 지시
NO_PARALLEL
질의의 수행을 병렬로 진행하지 않도록 지시
PQ_DISTRIBUTE
조인을 포함한 질의의 병렬 처리에서 로우의 분산 방법을 지시
실체화 뷰
REWRITE
비용의 비교 없이 실체화 뷰(Materialized View)를 사용하여 질의의 다시쓰기를 지시
NO_REWRITE
질의의 다시 쓰기를 하지 않도록 지시
MATERIALIZE
With 절 안에 있는 Subquery를 실체화 뷰(Materialized View)로 만들도록 지시
INLINE
With 절 안에 있는 Subquery를 실체화 뷰(Materialized View)로 만들지 않도록 지시
기타
APPEND
DML 문장에서 직접 데이터 파일에 추가하는 삽입 방법 즉
Direct-Path 방식을 수행하도록 지시
APPEND_VALUES
VALUES 절을 사용하는 INSERT 문에서 직접 데이터 파일에 추가하는 삽입 방법, 즉 Direct-Path 방식을 수행하도록 지시
NOAPPEND
DML 문장에서 Direct-Path 방식을 수행하지 않도록 지시
IGNORE_ROW_ON_DUP KEY_INDEX
유일키 제약조건을 위배하는 로우가 삽입 될 때, 오류를 발생하지 않도록 처리
CARD
지정 테이블의 Cardinality를 지정하여, 쿼리를 최적화 할 때 이용하도록 합니다.
MONITOR
쿼리를 수행할 때 쿼리 수행 정보를 모으도록 지시
NO_MONITOR
쿼리를 수행할 때 쿼리 수행 정보를 모으지 않도록 지시
USE_CONCAT
OR expansion된 플랜만 생성
NO_EXPAND
OR expansion된 플랜을 배제
RESULT_CACHE
Query 결과를 저장하기 위해 Result Cache를 사용
NO_SUBQUERY_CACHE
쿼리를 수행하는 경우 특정 부질의에 대해 부질의 결과를 캐싱하지 않도록 강제
OPT_PARAM
쿼리가 수행되는 동안 초기화 환경 변수를 바꾸는 데 사용
질의 변형
질의 변형(Query Transformation)에 대한 힌트를 사용하여 Tibero의 질의 변형 방식에 영향을 줄 수 있습니다.
NO_QUERY_TRANSFORMATION
NO_QUERY_TRANSFORMATION는 질의 변형기(Query Transformer)가 전체 쿼리에 대해 변형을 실행 하지 않도록 지시하는 힌트입니다. Tibero에서는 쿼리 변형이 자동으로 수행되며, 최적화된 형태로 쿼리를 변형하여 실행계획을 생성합니다. NO_QUERY_TRANSFORMATION 힌트를 사용합니다면 디폴트로 수행되는 쿼리 변형을 막을 수 있습니다
문법
NO_MERGE
NO_MERGE는 질의 변형기(Query Transformer)가 특정 뷰에 대해 뷰 병합을 하지 않도록 지시하는 힌트 입니다. Tibero에서는 뷰 병합이 디폴트로 수행되며, 뷰가 병합이 가능할 경우 상위의 질의 블록과 결합해 하나의 질의 블록을 형성합니다. NO_MERGE 힌트를 사용하면 이렇게 디폴트로 수행되는 뷰의 병합을 막을 수 있습니다.
문법
예시
위의 예에서처럼 NO_MERGE 힌트는 병합되기를 원하지 않는 뷰의 질의 블록에 명시합니다.
힌트가 없습니다면 뷰가 병합되어 질의 최적화기에서 테이블 T1, T2, T3에 대한 조인 순서와 조인 방법을 고려하게 되지만, 위와 같이 힌트가 있을 경우는 뷰가 병합되지 못하기 때문에 T2와 T3가 먼저 조인되고 그 이후에 T1이 조인됩니다.
UNNEST
UNNEST는 질의 변형기가 특정 부질의(Subquery)를 언네스팅하도록 지시하는 힌트입니다. Tibero는 부질의 언네스팅을 디폴트로 수행하지만 특정 쿼리만 언네스팅 하기위해서는 초기화 파라미터에서 언네스팅을 해제하면 됩니다. 그러면 UNNEST 힌트를 이용할 수 있습니다. UNNEST 힌트는 부질의 블록에 명시합니다.
문법
NO_UNNEST
NO_UNNEST는 질의 변형기가 특정 부질의에 대해 언네스팅을 수행하지 않도록 지시하는 힌트입니다. Tibero는 부질의 언네스팅을 디폴트로 수행하며 언네스팅이 가능한 경우 부질의를 조인으로 변환합니다. 이 때 NO_UNNEST 힌트를 사용해서 언네스팅을 막을 수 있습니다. NO_UNNEST 힌트는 부질의 블록에 명시합니다.
문법
NO_JOIN_ELIMINATION
NO_JOIN_ELIMINATION는 질의 변형기(Query Transformer)가 불필요한 조인을 찾아서 제거하지 않도록 지시하는 힌트입니다. Tibero에서는 디폴트로 질의 결과를 생성하는데 필요하지 않은 조인들을 찾아서 제거하며, NO_JOIN_ELIMINATION 힌트를 사용하면 이를 막을 수 있습니다.
문법
예시
위의 예처럼 T2의 컬럼을 요청하였을 때 T1과 T2 사이에 참조 관계가 정의되어 있습니다면 T1과 조인을 하지 않아도 조건절에 주어진 T2.FK = T1.PK는 T2.FK가 NULL이 아닌 한 참임을 알 수 있습니다. 질의 변환기는 이처럼 필요하지 않은 조인을 찾아 제거하는데 NO_JOIN_ELIMINATION 힌트를 적용하면 이러한 기능을 막을 수 있습니다.
STAR_TRANSFORMATION
STAR_TRANSFORMATION는 스타 변형 (STAR TRANSFORMATION)이 가능할 경우 변형을 시도하도록 지시하는 힌트입니다. Tibero에서는 디폴트로 스타 변형을 하지않도록 하는데, STAR_TRANSFORMATION 힌트를 사용하면 이를 사용할 수 있습니다.
문법
예시
스타 스키마(STAR SCHEMA)를 사용하는 데이터베이스 환경에서 위의 예처럼 쿼리를 쓰면 스타 변형 을 할 수 있습니다. 이 변형은 기존 INDEX JOIN으로만 풀린 플랜에서 BITMAP KEY ITERATION을 포함한 플랜으로 풀리게 하여 더 효율적인 결과를 얻게 합니다.
최적화 방법
최적화 방법이 적용된 힌트를 사용하여 처리 과정과 결과 표시를 최적화할 수 있습니다. 만약 최적화 방법이 적용된 힌트가 사용된 질의가 있습니다면 해당 질의에 대해서는 통계 정보와 초기화 파라미터의 최적화 방법 (OPTIMIZER MODE)의 값이 없는 것처럼 처리됩니다.
ALL_ROWS
ALL_ROWS는 최소한의 리소스를 사용하여 전체 결과에 대한 처리량이 가장 많도록 처리과정의 최적화 방법을 선택하는 힌트입니다.
문법
FIRST_ROWS
FIRST_ROWS는 첫 로우부터 파라미터로 입력된 번호의 로우까지 가장 빠르게 보여줄 수 있도록 결과 표시의 최적화 방법을 선택하는 힌트입니다.
문법
접근 방법
접근 방법이 적용된 힌트는 질의 최적화기가 특정 접근 방법의 사용이 가능한 경우, 그 방법을 사용하도록 명시합니다. 만일 힌트에서 명시한 방법을 사용할 수 없는 경우에는 질의 최적화기는 그 힌트를 무시힙니다.
힌트에 명시하는 테이블명은 SQL 문에서 사용하는 이름과 동일해야 합니다. 즉, 테이블 이름에 대한 별칭을 사용하였다면, 테이블 이름 대신에 별칭을 사용해야 합니다. SQL 문에서 테이블 이름에 스키마 이름을 포함하여 명시하였더라도 힌트에서는 테이블 이름만을 명시해야 합니다.
FULL
FULL은 명시한 테이블을 스캔할 때, 전체 테이블을 스캔하도록 지시하는 힌트입니다. WHERE 절에 명시된 조건식에 맞는 인덱스가 있더라도 전체 테이블 스캔을 사용합니다.
문법
INDEX
INDEX는 명시한 테이블을 스캔할 때, 명시한 인덱스를 사용하여 인덱스 스캔을 하도록 지시하는 힌트입니다.
문법
NO_INDEX
NO_INDEX는 명시한 테이블을 스캔할 때, 명시한 인덱스를 사용하는 인덱스 스캔을 하지 않도록 지시하는 힌트입니다. 만일 NO_INDEX 힌트와 INDEX 또는 INDEX_ASC, INDEX_DESC 힌트가 동일한 인덱스를 명시합니다면 질의 최적화기는 이 두 힌트를 모두 무시합니다.
문법
INDEX_ASC
INDEX_ASC는 명시한 테이블을 스캔할 때, 명시한 인덱스를 사용하여 인덱스 스캔을 하도록 지시하는 힌트입니다. 만일 인덱스 범위 스캔을 사용하는 경우에는 인덱스를 오름차순으로 스캔하도록 합니다. 현재 Tibero의 인덱스 스캔의 기본 동작이 오름차순이기 때문에 INDEX_ASC는 INDEX와 동일한 작업을 수행합니다. 분할된 인덱스의 경우 분할된 각 영역 내에서 오름차순으로 스캔합니다.
문법
INDEX_DESC
INDEX_DESC는 명시한 테이블을 스캔할 때, 명시한 인덱스를 사용하여 인덱스 스캔을 하도록 지시하는 힌트입니다. 만일 인덱스 범위 스캔을 사용하는 경우에는 인덱스를 내림차순으로 스캔하도록 합니다. 분할된 인덱스의 경우 분할된 각 영역 내에서 내림차순으로 스캔합니다.
문법
INDEX_FFS
INDEX_FFS는 명시한 테이블에 대해 명시한 인덱스를 사용하여 빠른 전체 인덱스 스캔(Fast Full Index Scan)을 사용하도록 지시하는 힌트입니다.
문법
NO_INDEX_FFS
NO_INDEX_FFS는 명시한 테이블에 대해 명시한 인덱스를 사용하는 빠른 전체 인덱스 스캔을 사용하지 않도록 지시하는 힌트입니다.
문법
INDEX_RS
INDEX_RS는 명시한 테이블에 대해 명시한 인덱스를 사용하여 범위 인덱스 스캔(Range Index Scan)을 사용하도록 지시하는 힌트입니다.
문법
NO_INDEX_RS
NO_INDEX_RS는 명시한 테이블에 대해 명시한 인덱스를 사용하는 범위 인덱스 스캔을 사용하지 않도록 지시하는 힌트입니다.
문법
INDEX_SS
INDEX_SS는 명시한 테이블에 대해 명시한 인덱스를 사용하여 인덱스 스킵 스캔(Index Skip Scan)을 사용하도록 지시하는 힌트입니다.
문법
NO_INDEX_SS
NO_INDEX_SS는 명시한 테이블에 대해 명시한 인덱스를 사용하는 인덱스 스킵 스캔을 사용하지 않도록 지시하는 힌트입니다.
문법
INDEX_JOIN
INDEX_JOIN은 명시한 테이블에 대해 명시한 두 개 이상의 힌트를 사용하여, 테이블을 스캔할 때 자체 조 인(Self Join)을 사용하도록 지시하는 힌트입니다.
문법
조인 순서
LEADING, ORDERED는 조인 순서를 결정하는 힌트입니다. LEADING 힌트가 ORDERED보다 질의 최적화기를 선택할 수 있는 폭이 넓어서 LEADING을 사용하는 것이 좋습니다.
LEADING
LEADING은 조인에서 먼저 조인되어야 할 테이블의 집합을 명시하는 힌트입니다. LEADING 힌트가 먼저 조인될 수 없는 테이블을 포함하는 경우 무시됩니다.
또한 LEADING 힌트끼리 충돌하는 경우에는 LEADING, ORDERED 힌트가 모두 무시됩니다. 만일 ORDERED 힌트가 사용되는 경우에는 LEADING 힌트는 모두 무시됩니다.
문법
ORDERED
ORDERED는 테이블을 FROM 절에 명시된 순서대로 조인하도록 지시하는 힌트입니다. 질의 최적화기는 조인의 결과 집합의 크기에 대한 정보를 추가로 알고 있습니다. 사용자가 그 정보를 통해 질의 최적화기의 조인 순서를 명확히 알고 있을 경우에만 ORDERED 힌트를 사용하는 것이 좋습니다.
문법
조인 방법
조인 방법이 적용된 힌트는 한 테이블에 대해서만 조인 방법을 지시합니다. 조인 방법이 적용된 힌트는 명시한 테이블이 조인의 내부 테이블로 사용될 경우에만 참조됩니다. 명시한 테이블을 외부 테이블로 사용하는 경우에는 조인 방법이 적용된 힌트는 무시됩니다.
USE_NL
USE_NL은 명시한 테이블을 다른 테이블과 조인하는 경우 중첩 루프 조인을 사용하도록 지시하는 힌트입니다.
문법
NO_USE_NL
NO_USE_NL은 명시한 테이블을 다른 테이블과 조인하는 경우 중첩 루프 조인을 사용하지 않도록 지시 하는 힌트입니다. 하지만, 특수한 경우에는 이 힌트가 주어졌더라도 질의 최적화기에서 중첩 루프 조인을 사용하는 플랜을 생성할 수 있습니다.
문법
USE_NL_WITH_INDEX
USE_NL_WITH_INDEX는 명시한 테이블을 다른 테이블과 조인하는 경우 중첩 루프 조인을 사용하도록 지시하는 힌트입니다. 이때 명시한 테이블에 대한 접근은 명시한 인덱스와 두 테이블에 대한 조인 조건을 이용하여 이뤄져야 합니다. 만일 인덱스를 사용할 수 없는 경우라면 힌트는 무시됩니다.
문법
USE_MERGE
USE_MERGE는 명시한 테이블을 다른 테이블과 조인하는 경우 합병 조인을 사용하도록 지시하는 힌트 입니다.
문법
NO_USE_MERGE
NO_USE_MERGE는 명시한 테이블을 다른 테이블과 조인하는 경우 합병 조인을 사용하지 않도록 지시 하는 힌트입니다.
문법
USE_HASH
USE_HASH는 명시한 테이블을 다른 테이블과 조인하는 경우 해시 조인을 사용하도록 지시하는 힌트입니다.
문법
NO_USE_HASH
NO_USE_HASH는 명시한 테이블을 다른 테이블과 조인하는 경우 해시 조인을 사용하지 않도록 지시하는 힌트입니다.
문법
HASH_SJ
HASH_SJ는 부질의를 언네스팅할 때 해시방법을 이용한 세미조인으로 하도록 지시하는 힌트입니다.
문법
HASH_AJ
HASH_AJ는 부질의를 언네스팅할 때 해시방법을 이용한 안티조인으로 하도록 지시하는 힌트입니다.
문법
MERGE_SJ
MERGE_SJ는 부질의를 언네스팅할 때 머지방법을 이용한 세미조인으로 하도록 지시하는 힌트입니다.
문법
MERGE_AJ
MERGE_AJ는 부질의를 언네스팅할 때 머지방법을 이용한 안티조인으로 하도록 지시하는 힌트입니다.
문법
NL_SJ
NL_SJ는 부질의를 언네스팅할 때 네스티드 루프 방법을 이용한 세미조인으로 하도록 지시하는 힌트입니다.
문법
NL_AJ
NL_AJ는 부질의를 언네스팅할 때 네스티드 루프 방법을 이용한 안티조인으로 하도록 지시하는 힌트입니다.
문법
SWAP_JOIN_INPUTS
SWAP_JOIN_INPUTS는 해시 조인을 수행하는 경우 명시한 테이블을 사용하여 해시 테이블을 빌드하도록 지시하는 힌트입니다.
문법
NO_SWAP_JOIN_INPUTS
NO_SWAP_JOIN_INPUTS는 해시 조인을 수행하는 경우 조인 순서가 바뀌는 경우, 명시한 테이블이 해시 테이블로 빌드되지 않도록 지시하는 힌트입니다.
문법
병렬 처리
PARALLEL
PARALLEL은 지정한 개수의 스레드를 사용해 질의의 수행을 병렬로 진행하도록 지시하는 힌트입니다.
문법
NO_PARALLEL
NO_PARALLEL은 질의의 수행을 병렬로 진행하지 않도록 지시하는 힌트입니다.
문법
PQ_DISTRIBUTE
PQ_DISTRIBUTE는 조인을 포함한 질의의 병렬 처리에서 조인될 로우의 분산 방법을 지시하는 힌트입니다. 분산 방법으로는 HASH-HASH, BROADCAST-NONE, NONE-BROADCAST, NONE-NONE이 있으며 특정한 분산 방법을 선택함으로써 병렬 처리에서 조인의 성능을 향상시킬 수 있습니다.
문법
아래는 각각의 속성에 대한 설명입니다.
NONE NONE
힌트가 없을 때와 같은 플랜이 생성
BROADCAST NONE
조인의 왼쪽은 BROADCAST, 오른쪽은 PE BLOCK ITERATOR의 분산 방법 으로 동작
NONE BROADCAST
조인의 왼쪽은 PE BLOCK ITERATOR, 오른쪽은 BROADCAST의 분산 방법 으로 동작
HASH HASH
속조인의 왼쪽, 오른쪽 모두 HASH의 분산 방법으로 동작
실체화 뷰 (Materialized View)
REWRITE
REWRITE는 해당 질의 블록에서 비용의 비교 없이 실체화 뷰를 사용하여 질의의 다시 쓰기를 하도록 지시하는 힌트입니다. 따라서 최종으로는 REWRITE 힌트가 사용된 질의 블록만 다시 쓰기를 한 결과와 모든 블록에서 다시 쓰기를 한 결과의 비용을 비교해서 더 좋은 쪽을 질의 최적화기가 선택하게 됩니다.
실체화 뷰의 목록이 명시된 경우에는 목록에 있는 실체화 뷰만 사용하여 질의의 다시 쓰기를 시도합니다.
문법
NO_REWRITE
NO_REWRITE는 해당 질의 블록에서는 질의의 다시 쓰기를 하지 않도록 지시하는 힌트입니다.
문법
MATERIALIZE
MATERIALIZE는 With 절 안에 있는 Subquery를 실체화 뷰(Materialized View)로 만들도록 지시하는 힌트입니다.
문법
INLINE
INLINE은 With 절 안에 있는 Subquery를 실체화 뷰(Materialized View)로 만들지 않도록 지시하는 힌트입니다.
문법
기타
APPEND
APPEND는 DML 문장에서 직접 데이터 파일에 추가하는 삽입 방법 즉 Direct-Path 방식을 수행하도록 지시하는 힌트입니다.
Direct-Path 방식은 일반적인 삽입 방법과 달리 항상 새로운 데이터 블록을 할당받아서 데이터 삽입을 수행하며, 버퍼 캐시를 이용하지 않고 직접 데이터 파일을 추가하기 때문에 성능 향상에 많은 이점이 있습니다.
문법
APPEND_VALUES
APPEND_VALUES는 VALUES절을 사용하는 INSERT 문에서 직접 데이터 파일에 추가하는 삽입 방법 즉 Direct-Path 방식을 수행하도록 지시하는 힌트입니다.
Direct-Path 방식은 일반적인 삽입 방법과 달리 항상 새로운 데이터 블록을 할당받아서 데이터 삽입을 수 행하며, 버퍼 캐시를 이용하지 않고 직접 데이터 파일을 추가하므로 일괄 삽입에 사용하면 성능 향상에 많은 이점이 있습니다.
문법
NOAPPEND
NOAPPEND는 DML 문장에서 Direct-Path 방식을 수행하지 않도록 지시하는 힌트입니다.
문법
IGNORE_ROW_ON_DUPKEY_INDEX
single table INSERT문에서만 사용이 가능합니다. 유일키 제약조건을 위배하면 에러를 발생시키지 않고 삽입하던 로우를 롤백하고 다음 로우부터 삽입을 재개합니다.
인덱스를 명시하지 않은 경우, 여러 개의 인덱스를 명시한 경우, 명시된 인덱스가 UNIQUE 속성을 갖지 않는 경우에는 힌트이지만 오류를 발생시킵니다. 이 힌트를 명시하면 APPEND, PARALLEL 힌트는 무시됩니다.
문법
CARD
CARD는 쿼리 최적화 할 때에 지정 테이블의 Cardinality를 주어진 값을 이용하여 계산하도록 지시하는 힌트입니다.
문법
MONITOR
MONITOR는 쿼리를 수행할 때 쿼리 수행 정보를 모으도록 지시하는 힌트입니다.
문법
NO_MONITOR
NO_MONITOR는 쿼리를 수행할 때 쿼리 수행 정보를 모으지 않도록 지시하는 힌트입니다.
문법
USE_CONCAT
USE_CONCAT은 OR 조건문을 UNION ALL로 쪼개어 OR 양쪽에 대하여 별도의 플랜 노드를 만들어 합치는 OR expansion된 플랜이 만들어지도록 강제하는 힌트입니다.
문법
NO_EXPAND
NO_EXPAND는 OR expansion을 막음으로써 OR 조건문이 필터로 보존된 플랜을 만들도록 강제하는 힌트입니다.
문법
RESULT_CACHE
Query 결과를 Cache에 저장하기 위한 Result Cache를 사용하도록 지시하는 힌트입니다. RESULT_CACHE_MODE 초기 파라미터 값이 "MANUAL"일 때만 유효하며, "FORCE"일 때는 힌트의 존재 여부와 관계없이 모든 Query 결과를 Result Cache에 저장합니다.
문법
NO_SUBQUERY_CACHE
NO_SUBQUERY_CACHE는 특정 질의 블록에 대해 부질의 결과를 캐싱하지 않도록 강제하는 힌트입니다. Tibero는 가능합니다면 부질의 결과 캐싱 기능을 사용하는 실행 계획을 수립합니다. 이때 이 힌트를 사용하여 특정 질의 블록에 대해 부질의 결과 캐싱을 강제로 막을 수 있습니다. NO_SUBQUERY_CACHE 힌트는 대상 질의 블록에 명시하며, 부질의의 실행 계획 최상위 노드로서 CACHE가 생기지 않습니다.
문법
예시
위에 예처럼 EXISTS절 질의 블록에 힌트를 명시할 경우, 해당 블록에 대해 부질의 결과를 캐싱하는 기능을 사용하지 않도록 강제합니다.
OPT_PARAM
쿼리가 수행되는 도중 초기화 환경변수를 바꿔서 수행하는 힌트입니다. 예를 들어 수행되는 쿼리에 /*+OPT_PARAM(OPTIMIZER_MODE FIRST_ROWS_1)*/ 이라는 힌트를 준다면, 해당 쿼리가 수행되는 동안에 한해서 OPTIMIZER_MODE가 FIRST_ROWS_1로 설정되어 수행됩니다.
문법
Last updated

