DB
[DB] 드라이빙, 드라이븐 테이블
쌈뽕코딩
2025. 5. 19. 19:50
🤔 드라이빙 테이블?
- 먼저 읽기 시작하는 테이블이다.
- 이 테이블의 결과를 기반으로, 다른 테이블(드라이븐 테이블)을 조건에 따라 탐색한다.
- 루프의 바깥쪽 테이블 이라고 생각하면 된다.
🤔 드라이븐 테이블?
- 드라이빙 테이블에서 가져온 각 행을 기준으로 탐색되는 두 번째 테이블이다.
- 루프의 안쪽 테이블 이다.
- 드라이빙 테이블의 값을 이용해서 조인 조건을 만족하는 행을 찾는 대상이다.
🤔 왜 중요할까?
- 조인의 성능은 드라이빙 테이블의 선택 에 크게 영향을 받는다.
- 👉 드라이빙 테이블이 작고 조건이 잘 걸리는 테이블일수록 효율적이다.
예시: Orders가 수십만 개고 Customers가 수천 명일 때,
SELECT *
FROM Orders o
JOIN Customers c ON o.customer_id = c.id
WHERE c.region = 'Asia';
- 이 경우에는 옵티마이저가 어떻게 판단하느냐에 따라 드라이빙/드라이븐이 달라질 수 있다.
- 일반적으로는 조건이 더 명확한 Customers가 드라이빙 테이블이 되면 더 효율적이다.
- Customers 테이블에는 "Asia"라는 명확한 필터 조건이 걸려 있는 반면 Orders 테이블은 조건이 없어서 모든 주문을 조회해야 한다.
- 먼저 Orders 전부 다 읽고 customer_id를 기준으로 Customers를 찾는 것보단 먼저 조건에 맞는 Customers만 찾고, 그들의 주문만 찾는 게 빠르다.