1. ORDER BY와 인덱스

1.1 ORDER BY 동작과정

정렬을 처리하는 방법에는 아래 3가지 방식이 있다.

  1. 인덱스를 이용하는 방법
  2. 드라이빙 테이블 정렬(filesort) 방법
  3. 임시 테이블 정렬 방법

먼저, 2.드라이빙 테이블 정렬(filesort) 처리 방식을 알아보자.

EXPLAIN 
SELECT *
FROM badge
JOIN employees ON badge.id = employees.badge_id
ORDER BY badge.name;

해당 쿼리 실행 계획은 아래와 같다.

Untitled

실행 계획을 보았을 때, Using filesort로 나온것을 볼 수 있다. 그럼 어떻게 동작한 것일까?

  1. 옵티마이저가 드라이빙 테이블로 badge 테이블을 선택한다.
  2. badge 테이블의 name 컬럼을 기준으로 오름차순 정렬을 수행한다.(filesort)
  3. 정렬된 결과를 순서대로 읽으면서 employess 테이블과 조인을 수행해 최종 결과를 가져온다.

단, Filesort로 처리되기 위해선 아래와 같은 조건이 필요하다.