MySQL 정렬 처리방식에는 다음 3가지 방식이 있다.
explain 을 이용해 쿼리 실행 방식을 조회 했을 때 extra comment 를 통해 쿼리에 사용 되는 정렬 방식을 확인 할 수 있다.
위에서 아래로 갈 수록 처리 속도가 느리고 DB 리소스를 많이 사용 하는 정렬 방식이다.
쿼리를 실행 하였을 때 이미 인덱스가 정렬이 되어 있어 순서 대로 읽어 오기만 하면 되는 방식으로 가장 이상적인 방법이라고 할 수 있다.
다만, 인덱스를 이용한 정렬 방식을 사용 하기 위해서는 아래의 조건을 만족 해야한다.
일반적으로 Table Join 을 하게 된다면, 레코드 개수가 몇 배로 불어나기 때문에
Join 이 실행 되기 전에 드라이빙 테이블을 먼저 정렬 하는 방식이다.
Join 이 실행 되기 전에 먼저 정렬이 이루어지므로 임시 테이블은 사용 되지 않는다.
DB 옵티마이저가 드라이빙이블만 정렬 하는 방식을 선택 하기 위해서는 아래의 조건을 만족 해야한다.
테이블 조인 결과를 임시 테이블에 저장 한 뒤, 그 결과를 임시 테이블에서 정렬 하는 방식이다.
정렬 해야하는 레코드 수가 위에서 설명 한 3가지 방식 중에 제일 많고
임시 테이블 용량이 큰 경우 임시테이블이 디스크에 저장 되어 I/O 부하가 발생 할 수 있는 방법이다.
만약 explain 을 이용해 쿼리 실행 계획을 확인 했을때
extra comment 에 using filesort, using temporary
가 있다면,
Index 생성을 고려하거나, Application Layer 에서 정렬 하는 방법을 고려 해보는 것이 좋다.