상세 컨텐츠

본문 제목

/*+USE_IDX ORDERED*/ /*+USE_NL ORDERED*/ /*+USE_IDX*/ 인덱스 힌트 차이

IT/DB

by JR 2025. 12. 17. 17:07

본문

300x250
반응형

 

 

🔹 전제: 이 힌트들은 CUBRID 전용 힌트

/*+ USE_IDX */
/*+ USE_NL */
/*+ ORDERED */
  • MySQL 힌트 아님
  • Oracle 힌트와 개념은 비슷하지만 동작 방식은 CUBRID 기준

✅ 1️⃣ USE_IDX

/*+ USE_IDX */

📌 의미

👉 옵티마이저에게 “가능하면 인덱스를 사용해라” 라고 힌트를 주는 것

  • 어떤 인덱스를 쓸지는 옵티마이저가 판단
  • “Full Scan 하지 말고 Index Scan 위주로 고려해라” 정도의 가이드

✔ 언제 쓰나

  • 옵티마이저가 통계 오판으로 Full Scan을 선택할 때
  • 조건절이 충분히 선택적인데 인덱스를 안 타는 경우
  • 비교적 가벼운 힌트 (강제 아님)

✔ 특징

  • 강제력 약함
  • 인덱스가 없으면 무시됨
  • 잘못 쓰면 효과 없음

✅ 2️⃣ USE_NL

/*+ USE_NL */

📌 의미

👉 조인 방식으로 Nested Loop Join을 사용하라는 힌트

CUBRID 조인 방식:

  • NL (Nested Loop)
  • Hash Join
  • Merge Join

✔ 언제 쓰나

  • Driving 테이블이 매우 작을 때
  • Inner 테이블에 인덱스가 잘 걸려 있을 때
  • OLTP 쿼리 (소량 반복 조회)

✔ 예

/*+ USE_NL */
SELECT ...
FROM A, B
WHERE A.id = B.id;

✅ 3️⃣ ORDERED

/*+ ORDERED */

📌 의미

👉 FROM 절에 적은 테이블 순서를 그대로 조인 순서로 사용하라

옵티마이저가:

  • “B부터 조인할게”
  • “C부터 조인할게”

이걸 못 하게 막고
FROM에 적은 순서가 Driving → Driven 테이블이 됨.

✔ 언제 쓰나

  • 조인 순서를 사람이 더 잘 아는 경우
  • 통계가 깨졌을 때
  • 소형 → 대형 테이블로 조인하고 싶을 때

🔥 조합별 의미 (형님이 올린 케이스)

① /*+ USE_IDX ORDERED */

의미

  • 인덱스 사용 우선 고려
  • FROM 절 순서대로 조인

언제?

  • 조인 순서는 고정하고 싶고
  • 인덱스를 타기만 하면 되는 경우

② /*+ USE_NL ORDERED */

의미

  • Nested Loop Join 강제
  • FROM 절 순서대로 조인

언제?

  • 소형 테이블 → 대형 테이블 조인
  • Inner 테이블에 조인 인덱스 확실
  • OLTP 쿼리에서 가장 많이 쓰임

③ /*+ USE_IDX */

의미

  • 인덱스 사용 “권장”
  • 조인 순서, 방식은 옵티마이저에게 맡김

언제?

  • 옵티마이저 판단을 크게 건드리고 싶지 않을 때
  • 인덱스만 쓰게 유도

실무 기준 요약표

힌트 강제력 영향 범위 추천상황
USE_IDX 약함 인덱스 선택 인덱스 안 탈 때
USE_NL 중간 조인 방식 OLTP 소량 조회
ORDERED 강함 조인 순서 조인 순서 고정 필요
USE_NL + ORDERED 강함 방식 + 순서 성능 튜닝 시 자주 사용

실무 주의사항 (중요)

  • 힌트는 통계가 정상일 때는 가급적 쓰지 말 것
  • 통계 바뀌면 힌트가 오히려 독이 될 수 있음
  • 대용량 배치 쿼리에는 USE_NL 위험함
  • 힌트 쓰면 반드시 EXPLAIN 확인 필수

🔥 한 줄 요약

USE_IDX = 인덱스 써봐
USE_NL = NL 조인으로 가라
ORDERED = FROM 순서대로 조인해라


 

300x250
반응형

관련글 더보기