JOIN원리 관련 기술면접 질문 미리보기
Q1. 중첩 루프 조인에 대해 설명해주세요.
Q2. 물리적 JOIN 방식에 대해서 설명해보세요.
https://velog.io/@itonse/DB-JOIN
앞서 JOIN 종류(논리적 조인)에 대해서 글을 작성하였는데, 여기에 나온 JOIN 들은 이 원리를 기반으로 작업이 이루어집니다. (물리적 조인)
중첩 for문과 같은 원리로 조건에 맞는 조인을 하는 방법입니다.
용어 정리
- 선행 테이블(외부 테이블, Driving Table): 반복문의 외부에 있는 테이블
- 후행 테이블(내부 테이블, Driven Table): 반복문의 내부에 있는 테이블
for (int i = 0; i < dept.length; i++) { << driving table
for (int j = 0; j < emp.length; j++) { << driven table
// Search
}
}
각각의 테이블을 조인할 필드 기준으로 정렬하고 정렬이 끝난 이후에 조인 하는 방식
해시 테이블을 기반으로 조인을 수행하는 방식으로, 두 테이블 중 하나를 해시 테이블로 선정하여
조인 열을 해시 알고리즘으로 비교
MySQL의 경우 8.0.18 버전 부터 이 기능을 사용할 수 있게 되었다.
-> MySQL의 해시 조인 단계는 빌드 단계, 프로브 단계로 나뉜다.
join_buffer_size
에 의해 사용 가능한 메모리 양이 제어되며, 런타임 시 조정 가능Q1. 중첩 루프 조인에 대해 설명해주세요.
두 테이블에서 한 쪽 테이블의 각 행에 대해 다른 테이블을 순차적으로 탐색하며 조인 조건을 만족하는 행들을 찾아 결합합니다. 작은 테이블에 대해서는 효율적이지만 테이블 크기가 커질수록 성능이 떨어집니다.
Q2. 물리적 JOIN 방식에 대해서 설명해보세요.
두 테이블에서 한 쪽 테이블의 각 행에 대해 다른 테이블을 순차적으로 탐색하며 조인 조건을 만족하는 행들을 찾아 결합합니다. 작은 테이블에 대해서는 효율적이지만 테이블 크기가 커질수록 성능이 떨어집니다.
두 테이블을 각각 조인 키에 따라 정렬한 후, 두 정렬된 테이블을 병합하며 조인 조건을 만족하는 행들을 찾아 결합합니다. 양쪽 테이블이 이미 정렬되어 있다면 효율적인 방식입니다.
한 쪽 테이블에 대해 조인 키로 해시 테이블을 생성합니다. 그런 다음 다른 테이블의 각 행에 대해 해시 테이블을 검색하여 조인 조건을 만족하는 행들을 찾아 결합합니다.메모리 사용량이 많지만 일반적으로 가장 효율적인 조인 방식입니다.
ref.
https://intser.tistory.com/16
https://velog.io/@eunhye_/SQL-조인Join-수행-원리
https://hyeyul-k.tistory.com/14
https://product.kyobobook.co.kr/detail/S000001834833https://land-turtler.tistory.com/121