EXPLAIN SELECT *
FROM employees e IGNORE INDEX(PRIMARY, ix_hiredate)
INNER JOIN dept_emp de IGNORE INDEX(ix_empno_fromdate, ix_fromdate)
ON de.emp_no=e.emp_no AND de.from_date=e.hire_date;
id | select_type | table | type | Extra |
---|---|---|---|---|
1 | SIMPLE | de | ALL | NULL |
1 | SIMPLE | e | ALL | Using where; Using join buffer(hash join) |
demp_emp
가 빌드 테이블, employees
테이블이 프로브 테이블로 처리되는 그림이다.join_buffer_size
변수로 크기를 제어할 수 있는 조인 버퍼를 제공한다. (기본값 256KB)해시 테이블 레코드 수가 많아 조인 버퍼 크기보다 커질 때는 빌드 테이블과 프로브 테이블을 적당한 크기의 청크로 분리한 뒤 청크별로 해시 조인과 동일 방식으로 처리한다.
join_buffer_size
를 넘어서면 빌드 테이블의 나머지 레코드를 디스크 청크로 구분해 저장 (빌드 테이블 청크)employees
테이블에서 읽은 레코드를 디스크 청크로 구분해서 저장 (프로브 테이블 청크)