1. ORDER BY와 인덱스
1.1 ORDER BY 동작과정
정렬을 처리하는 방법에는 아래 3가지 방식이 있다.
- 인덱스를 이용하는 방법
- 드라이빙 테이블 정렬(filesort) 방법
- 임시 테이블 정렬 방법
먼저, 2.드라이빙 테이블 정렬(filesort) 처리 방식을 알아보자.
EXPLAIN
SELECT *
FROM badge
JOIN employees ON badge.id = employees.badge_id
ORDER BY badge.name;
해당 쿼리 실행 계획은 아래와 같다.

실행 계획을 보았을 때, Using filesort로 나온것을 볼 수 있다. 그럼 어떻게 동작한 것일까?
- 옵티마이저가 드라이빙 테이블로 badge 테이블을 선택한다.
- 해당 쿼리에서는 badge 테이블이 읽을 데이터 수가 더 적기 때문에, 드라이빙 테이블로 선택될 것이다.
- badge 테이블의 name 컬럼을 기준으로 오름차순 정렬을 수행한다.(filesort)
- 정렬된 결과를 순서대로 읽으면서 employess 테이블과 조인을 수행해 최종 결과를 가져온다.
단, Filesort로 처리되기 위해선 아래와 같은 조건이 필요하다.
- 드라이빙 테이블의 컬럼만으로 ORDER BY 절에 작성해야 된다.