반응형
✅ 1. 임시 테이블 vs 일반 테이블
- **보통 임시 테이블을 driving table (왼쪽)**으로 두는 것이 유리합니다.
- 이유: 임시 테이블은 일반적으로 작고 메모리에 존재하는 경우가 많아, 먼저 읽고 일반 테이블과 조인하는 것이 효율적입니다.
SELECT *
FROM temp_table STRAIGHT_JOIN normal_table
ON temp_table.id = normal_table.id;
✅ 2. 임시 테이블 vs 임시 테이블
- 둘 중 더 작은 테이블을 driving으로 쓰는 것이 좋습니다.
- 두 임시 테이블의 크기나 인덱스 유무에 따라 다르므로 **실제 실행 계획(EXPLAIN)**을 보고 판단해야 합니다.
SELECT *
FROM smaller_temp STRAIGHT_JOIN larger_temp
ON smaller_temp.id = larger_temp.ref_id;
✅ 3. 일반 테이블 vs 일반 테이블
- 이 경우도 마찬가지로, 선택도(Selectivity)가 높은 쪽이나 행 수가 적은 쪽을 driving으로 잡습니다.
- 인덱스가 잘 잡혀 있거나 필터링 조건이 많은 쪽을 먼저 읽는 게 좋습니다.
SELECT *
FROM small_or_filtered STRAIGHT_JOIN large_table
ON small_or_filtered.key = large_table.key;
🧠 정리: 일반 테이블 vs 일반 테이블의 STRAIGHT_JOIN 전략
| 상황 | Driving Table으로 적합한 쪽 |
| 인덱스 없는 조인 컬럼 | 인덱스 없는 쪽 |
| 둘 다 인덱스 있음 | 더 작은 테이블 or 더 많은 조건이 있는 테이블 |
| 둘 다 인덱스 없음 | 더 작은 테이블 |
| 한쪽만 인덱스 있음 | 인덱스 없는 쪽 |
반응형
댓글