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

MySQL JOIN_FIXED_ORDER vs JOIN_ORDER

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

🔸 JOIN_ORDER

  • MySQL 8.0 이상에서만 사용 가능
  • Optimizer Hint 문법의 일부
  • ✅ 명시한 테이블 순서대로 고정된 JOIN 순서로 처리
  • 🔍 더 유연하고 세밀하게 제어 가능 (e.g. JOIN_PREFIX, JOIN_SUFFIX와 함께 사용 가능)

🔹 예시:

SELECT /*+ JOIN_ORDER(t1, t2, t3) */ *
FROM t1
JOIN t2 ON ...
JOIN t3 ON ...
  • 위 힌트는 옵티마이저가 t1 → t2 → t3 순서로 JOIN하도록 강제합니다.

🔸 JOIN_FIXED_ORDER

  • MySQL 5.7부터 사용 가능
  • 쿼리 힌트가 아니라 쿼리 블록 힌트
  • ✅ FROM 절에 나온 테이블의 순서대로 고정된 JOIN 순서를 사용
  • ❌ 별도로 테이블 목록을 지정할 수 없음

🔹 예시:

SELECT /*+ JOIN_FIXED_ORDER */ *
FROM t1
JOIN t2 ON ...
JOIN t3 ON ...
  • 테이블을 어떤 순서로 FROM 절에 나열했는지가 곧 JOIN 순서가 됩니다.
  • 힌트에 테이블 이름을 명시하지 않고, FROM 절 순서만 따름

🆚 차이 요약

항목JOIN_ORDERJOIN_FIXED_ORDER

지원 버전 MySQL 8.0 이상 MySQL 5.7 이상
테이블 순서 지정 힌트 안에서 직접 지정 가능 FROM 절의 순서를 따름
유연성 JOIN_PREFIX, JOIN_SUFFIX 등과 함께 사용 가능 제한적
사용 예 /*+ JOIN_ORDER(t1, t2) */ /*+ JOIN_FIXED_ORDER */

✅ 결론

  • MySQL 8.0 이상이라면 JOIN_ORDER가 더 유연하고 명시적으로 쓸 수 있어서 좋습니다.
  • MySQL 5.7을 쓰고 있거나 단순히 FROM 절 순서를 강제하고 싶을 땐 JOIN_FIXED_ORDER를 사용하면 됩니다.
반응형

댓글