[Oracle 11gR2] 오라클 힌트(Hint, /*+ */)에 대하여

오라클 힌트(Hint)는 SQL 실행 계획을 세우는 ‘네비게이션’ 같은 존재입니다. 오라클 옵티마이저가 최적의 길을 찾으려고 노력하지만, 데이터의 특성을 더 잘 아는 개발자가 “이 길로 가!”라고 직접 지시하는 것과 같습니다. 초보자도 바로 이해할 수 있도록 실무에서 가장 많이 쓰는 핵심 힌트 4가지 부류를 정리해 보겠습니다.

  1. 실행 건수를 알려주는 힌트: CARDINALITY
    • /*+ CARDINALITY(별칭 건수) */: 옵티마이저가 결과 건수를 예측하기 힘든 경우에 결과는 대략 몇 건이야라고 알려줍니다.
  2. 인덱스 제어 힌트: INDEX, INDEX_ASC, INDEX_DESC, FULL
    가장 많이 쓰이는 힌트입니다. 특정 인덱스를 강제로 타게 하거나, 데이터를 거꾸로(최신순) 읽게 할 때 씁니다.
    • /*+ INDEX(테이블명 인덱스명) */: 지정한 인덱스를 사용해라.
    • /*+ INDEX_DESC(테이블명 인덱스명) */: 인덱스를 큰 값부터 거꾸로 읽어라. (최근 게시글을 가져올 때 ORDER BY 대신 쓰면 매우 빠릅니다.)
    • /*+ FULL(테이블명) */: 인덱스 타지 말고 테이블 전체를 다 읽어라. (데이터가 아주 많고 대부분을 읽어야 할 때 유리)
  3. 조인 순서 및 방법 힌트: ORDERED, LEADING, USE_NL, USE_HASH
    여러 테이블을 조인할 때 “어떤 테이블을 먼저 읽을지” 결정합니다.
    • /*+ LEADING(table1 table2) */: table1을 먼저 읽고 그 다음 table2를 읽어라.
    • /*+ ORDERED */: FROM 절에 적힌 순서대로 조인해라.
    • /*+ USE_NL(테이블명) */: 특정 테이블과 조인할 때 Nested Loop Join(한 건씩 비교하는 방식)을 써라. (소량 데이터 조인에 유리)
    • /*+ USE_HASH(테이블명) */: Hash Join을 써라. (대량 데이터 조인에 유리)
  4. 기타 운영 팁 힌트: APPEND, PARALLEL
    • /*+ APPEND */: INSERT 할 때 비어있는 공간 찾지 말고 맨 뒤에 바로 붙여넣어라. (대량 데이터 입력 시 속도 향상)
    • /*+ PARALLEL(테이블명 숫자) */: CPU 코어 n개를 동시에 써서 병렬로 처리해라. (엄청나게 큰 데이터를 조회할 때 사용)

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다