다음과 같이 프로그래밍 언어에서 마치 중첩된 반복 명령을 사용하는 것처럼 작동한다고 해서 네스티드 루프 조인(Nested Loop Join)이라고 한다.
-- 예제 코드
SELECT *
FROM employees e
INNER JOIN salaries s ON s.emp_no = e.emp_no
AND s.from_date <= NOW();
s.to_date >= NOW();
WHERE e.first_name = 'Amor';
-- Nested Loop Join 의사 코드(Psuedo Code)
for (row1 IN employees) {
for (row2 IN salaries) {
if (condition_matched)
return (row1, row2);
}
}
join_buffer_size
시스템 변수로 크기를 제한할 수 있다.💡 실행 계획의 “Using Join Buffer(block nested loop)" 표시
MySQL 8.0.20 버전부터는 블록 네스티드 조인대신 MySQL 8.0.18 버전부터 도입된 해시 조인 알고리즘이 대체되어 사용된다.
따라서 MySQL 8.0.20 이후의 버전이라면 실행 계획의 Extra 칼럼에 더 이상 “Using Join Buffer” 메시지는 표시되지 않을 수도 있다.