ORDER BY 성능

ORDER BY 비용은 정렬을 새로 해야 하는지에서 갈립니다.

인덱스가 필터와 정렬 순서를 함께 만족하면 정렬된 순서로 읽을 수 있습니다. 그렇지 않으면 결과를 모은 뒤 별도 Sort가 붙습니다.

INDEX ORDER

인덱스 순서로 바로 읽음

정렬 기준과 인덱스 컬럼 순서가 맞으면 결과가 이미 원하는 순서입니다.

WHERE category = '전자기기'
ORDER BY price DESC
LIMIT 10
읽기 조건에 맞는 위치부터 필요한 순서로 접근합니다.
정렬 별도 Sort 없이 상위 행을 빨리 반환할 수 있습니다.
인덱스 예: (category, price) 조합을 검토합니다.
SEPARATE SORT

조회 결과를 다시 정렬

인덱스가 정렬을 해결하지 못하면 대상 행을 모아 메모리나 디스크에서 정렬합니다.

WHERE stock > 0
ORDER BY price * stock DESC
읽기 조건을 통과한 행을 먼저 모읍니다.
정렬 행 수와 정렬 키 폭이 클수록 비용이 커집니다.
한계 메모리를 넘으면 임시 디스크 정렬이 붙을 수 있습니다.
필터 먼저

WHERE로 줄인 뒤 정렬하면 정렬 대상 행 수가 줄어듭니다.

동점 기준

고유 키를 보조 정렬에 넣으면 페이지 경계가 안정됩니다.

LIMIT

상위 N만 필요하면 정렬과 제한을 함께 보고 인덱스를 설계합니다.