오라클의 힌트를 사용하는 것과 힌트를 사용하지 않는 것은 생각보다 꽤 큰 차이가 있다. 실제로 병렬처리 힌트 구문을 사용하고 차이를 확실히 느끼다 보니, 힌트구문을 더 알아보고 싶다는 생각을 하게 됐다. 그래서 오늘은 힌트절에 대한 개념과 사용 방법에 대해 알아보고자 한다.
1. 오라클 힌트(Oracle hint)란?
힌트는 SQL 튜닝을 하는데에 중요한 핵심 지시구문이다.
오라클은 자체적으로 최적의 실행 방법으로 작동시키는 옵티마이저(Optimizer)가 있는데, 간혹 옵티마이저가 실행하는 것보다, SQL 사용자가 직접 힌트 구문을 줌으로써 최적의 실행 구문을 선언하는 것이 더 나을 때가 있다.
사용자가 특정 SQL 문장에서 어떤 인덱스의 선택도가 높은지 알고 있다면, Optimizer에 의존한 실행 계획보다 훨씬 효율적으로 실행 계획을 구사할 수 있다. (단, 힌트와 인덱스, 조인의 개념을 정확히 알고 사용하지 않는다면 성능의 저하를 초래할 수 있기 때문에 잘 알고 적절히 사용하는 것이 중요하다.)
2. 힌트의 사용 방법
힌트는 기본적으로 /*+ (힌트명)*/의 규칙이 있어서 힌트명 안에 원하는 힌트명을 넣으며 문장의 서두에 넣는다.
-- 예시(병렬처리)
SELECT /*+ PARALLEL */
A.COL1,
A.COL2,
B.COL3
FROM TABLE1 A, TABLE2 B
WHERE A.COL1 = B.COL1
저 힌트명 안에 여러개의 힌트를 섞어서 쓸 수 있다. 여러개의 힌트를 사용할 때에는 힌트 간에 스페이스바(공백)으로 구분해야 한다.
-- 예시
SELECT /*+ PARALLEL FULL(A) */
A.COL1,
A.COL2,
B.COL3
FROM TABLE1 A, TABLE2 B
WHERE A.COL1 = B.COL1
힌트 안에 괄호에 명시되는 테이블은 테이블의 이름을 쓰는 것이 아니라, ALIAS(별칭)으로 정의되어야 하며, 스키마까지 포함해서 작성하지 않는다. (ex) FULL(TABLE1)(x) FULL(A)(o))
오늘은 힌트의 개념과 사용 방법에 대해서만 이야기를 했지만, 다음부터는 자주 사용하는 힌트절에 대해 적어보려고 한다.
'Code > Oracle' 카테고리의 다른 글
[Oracle] Oracle Exadata의 압축방식 (Exadata Hybrid columnar Compression, EHCC) (0) | 2022.05.21 |
---|---|
[Oracle] Oracle Exadata란 무엇인가 (0) | 2022.05.14 |
[Oracle] 오라클 append와 append_values 힌트, 사용방법 (0) | 2022.04.23 |
[Oracle] 오라클 WITH절을 사용하여 임시테이블 만들기 (0) | 2022.03.12 |
[Oracle] SQL 병렬 힌트를 부여하여 쿼리 수행시간 단축하기 (0) | 2022.02.26 |