반응형
📝Join 전략 (Join Methods)
Hash Join
-- NO INDEX
SELECT p.id, p.price, c.name
FROM product p
JOIN category c ON p.category_id = c.id;
- MySQL 8.0 이상에서 도입 되었으며 두 테이블 조인할 때 작은 쪽 메모리를 Hash Table로 만들고 큰테이블을 스캔하며 찾는다.
- 이미 해쉬 테이블로 만들어져있어서 O(1)로 접근후 O(N)으로 큰 테이블에서 풀스캔해서 매칭시킨다.
큰 테이블과 큰 테이블의 조인의 경우 풀스캔인 순차접근이라 랜덤 I/O에 대한 비용을 안 써서 성능의 이점을 얻을 수 있다. - 기본적으로 조인 컬럼에 인덱스가 없는 경우에 동작한다.
Nested Join
INDEX (category_id)
SELECT p.id, p.price, c.name
FROM product p
JOIN category c ON p.category_id = c.id;
- 가장 기본적인 Join 방식으로 외부 테이블(드라이빙)에서 내부 테이블(드리븐)을 찾는 방식
- 드리븐 테이블의 조인 컬럼에 Index가 있어야한다. 그래야 드라이빙이 드리븐을 빠르게 찾을 수 있다. (Nested 동작)
📝Sort 전략 (Sort Methods)
Filesort
-- NO INDEX
SELECT * FROM item ORDER BY name;
- 인덱스로 정렬을 해결하지 못하여 MySQL이 자체 정렬 알고리즘을 수행
- ORDER BY가 인덱스와 맞지 않을 때
WHERE 조건이 인덱스 순서를 깨뜨릴 때
여러 조건의 정렬 우선순위가 인덱스와 다를 때
반응형