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;

이 쿼리에서 예상되는 조인 순서:

  1. C (Driving Table) - memberId = 100 조건으로 선택도가 높음
  2. B (Driven Table) - id, deleteFlag 조건 추가 필터링
  3. 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
반응형