본문 바로가기
카테고리 없음

MySQL JOIN_ORDER, JOIN_PREFIX, JOIN_SUFFIX 비교

by 노력남자 2025. 6. 3.
반응형

🔸 1. JOIN_ORDER

  • 의미: MySQL 옵티마이저에게 JOIN 순서를 고정하라는 힌트입니다.
  • 용도: 옵티마이저가 자동으로 JOIN 순서를 변경하지 않도록 하여, 사용자가 명시한 순서대로 JOIN이 실행되도록 강제합니다.

🔹 예시:

SELECT /*+ JOIN_ORDER(t1, t2, t3) */ *
FROM t1
JOIN t2 ON ...
JOIN t3 ON ...
  • 위 힌트는 t1 → t2 → t3 순서로 JOIN하라는 의미입니다.
  • 성능 튜닝 시 옵티마이저가 비효율적인 JOIN 순서를 선택할 때 유용합니다.

🔸 2. JOIN_PREFIX

  • 의미: JOIN 순서가 지정된 선행 테이블들(t1, t2, …)을 유지하되, 이후는 옵티마이저가 결정하게 합니다.
  • 용도: 초반 몇 개의 테이블 JOIN 순서만 고정하고, 나머지는 옵티마이저에게 맡길 때 사용합니다.

🔹 예시:

SELECT /*+ JOIN_PREFIX(t1, t2) */ *
FROM t1
JOIN t2 ON ...
JOIN t3 ON ...
JOIN t4 ON ...
  • t1 → t2 순서는 고정되고, 이후 t3, t4는 옵티마이저가 결정합니다.

🔸 3. JOIN_SUFFIX

  • 의미: JOIN 순서가 지정된 마지막 테이블들(t3, t4, …)을 고정하고, 앞쪽은 옵티마이저에게 맡깁니다.
  • 용도: 마지막 JOIN 순서만 고정하고 앞부분은 유연하게 구성하고 싶을 때 사용합니다.

🔹 예시:

SELECT /*+ JOIN_SUFFIX(t3, t4) */ *
FROM t1
JOIN t2 ON ...
JOIN t3 ON ...
JOIN t4 ON ...
  • t3 → t4 순서는 고정되고, t1, t2는 옵티마이저가 결정합니다.

🧠 정리

힌트고정하는 JOIN 순서나머지 테이블 순서

JOIN_ORDER 전체 순서를 고정 없음 (전부 고정)
JOIN_PREFIX 앞쪽 순서 고정 뒤는 옵티마이저가 결정
JOIN_SUFFIX 뒤쪽 순서 고정 앞은 옵티마이저가 결정

반응형

댓글