반응형
🔸 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 | 뒤쪽 순서 고정 | 앞은 옵티마이저가 결정 |
반응형
댓글