DB/Mysql
[Mysql] 조인 테이블 조회시 드라이빙? 드리븐? 테이블 설명 및 STRAIGHT_JOIN 힌
hoonylab
2025. 4. 22. 16:26
728x90
반응형
드라이빙 테이블과 드리븐 테이블이란?
SQL에서 여러 테이블을 조인할 때, 옵티마이저는 효율적인 조인을 위해 조인의 시작 테이블과 그 이후 조인될 테이블을 구분합니다. 이를 각각 드라이빙(Driving) 테이블과 드리븐(Driven) 테이블이라고 합니다.
🚗 드라이빙 테이블 (Driving Table)
- 조인의 시작점이 되는 테이블입니다.
- 옵티마이저가 가장 먼저 액세스합니다.
- WHERE 조건의 선택도(Selectivity)가 높은 테이블일수록 유리합니다.
🧭 드리븐 테이블 (Driven Table)
- 드라이빙 테이블의 결과에 따라 조인되는 테이블입니다.
- 보통 루프 안에서 여러 번 조회됩니다.
- 인덱스를 잘 걸어야 성능 저하를 방지할 수 있습니다.
예시 쿼리에 적용해 보기
SELECT *
FROM C
JOIN B ON C.id = B.id
JOIN A ON A.id = B.id
WHERE B.id > 0 AND B.id < 10
AND B.deleteFlag
AND C.memberId = 100
ORDER BY B.id DESC;
이 쿼리에서 예상되는 조인 순서:
- C (Driving Table) -
memberId = 100
조건으로 선택도가 높음 - B (Driven Table) -
id, deleteFlag
조건 추가 필터링 - A (Driven Table) - 마지막 조인
STRAIGHT_JOIN 힌트란?
STRAIGHT_JOIN
은 옵티마이저에게 조인 순서를 강제로 고정하라고 지시하는 SQL 힌트입니다.
SELECT *
FROM C
STRAIGHT_JOIN B ON C.id = B.id
STRAIGHT_JOIN A ON A.id = B.id
WHERE B.id > 0 AND B.id < 10
AND B.deleteFlag
AND C.memberId = 100
ORDER BY B.id DESC;
이 힌트를 사용할 경우, 테이블은 C → B → A 순서로 고정되어 조인이 수행됩니다.
Tip: EXPLAIN
으로 실제 조인 순서를 확인하며 성능을 체크해보세요.
728x90
반응형