조인 방식: Nested Loop, Hash, Sort Merge 와 드라이빙 테이블
6. 정리
조인은 Nested Loop, Hash, Sort Merge 세 방식 중 하나로 실행되고 결과는 같습니다. 달라지는 것은 읽는 양과 메모리, 첫 행이 나오는 시각입니다.
Nested Loop 는 바깥 행마다 안쪽 표를 찾습니다. 바깥이 작고 안쪽 조인 키에 인덱스가 있을 때 유리하고 부분 범위 처리에 강합니다. Hash 는 작은 쪽으로 해시 표를 만들고 큰 쪽을 훑으며, 등가 조인에만 쓰이고 인덱스가 필요 없어 대량 집계에 유리합니다. Sort Merge 는 양쪽을 정렬해 병합하며 범위 조인에 쓰입니다.
드라이빙 표는 옵티마이저가 통계로 고르고 FROM 순서와 무관합니다. 조인 전에 거를 조건이 드라이빙 표에 있어야 Nested Loop 가 빠릅니다. MySQL 은 8.0.18 부터 Hash Join 이 있고 Sort Merge 는 없습니다. Oracle 은 세 방식 모두, MSSQL 은 Nested Loops, Hash Match, Merge Join 을 씁니다.
다음 레슨은 인덱스 튜닝입니다. 조인 키와 조건 컬럼에 어떤 인덱스를 만들어야 Nested Loop 가 빨라지는지 이어서 다룹니다.