반응형
🔸 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를 사용하면 됩니다.
반응형
댓글