ORDER BY의 숨겨진 비용 – 정렬은 왜 성능을 떨어뜨릴까?

Posted by heoncode
2025. 4. 13. 18:26 SQL 기초 정리
반응형
SMALL

ORDER BY 절은 SQL 쿼리에서 결과를 정렬하는 데 사용되며, 사용자에게 보기 좋은 데이터를 제공할 수 있습니다. 하지만 무심코 사용하는 ORDER BY가 성능에 큰 영향을 미칠 수 있다는 사실은 자주 간과됩니다.

1. ORDER BY는 왜 비용이 클까?

ORDER BY는 단순한 결과 필터링이 아니라, 전체 결과 집합을 대상으로 정렬 연산을 수행합니다. 이 정렬 과정은 메모리 또는 디스크 정렬을 수반하며, 다음과 같은 경우 성능 병목을 일으킬 수 있습니다.

  • 정렬 대상 컬럼에 인덱스가 없을 경우
  • 정렬 대상이 조인 결과나 서브쿼리 결과일 경우
  • 정렬 대상 레코드가 대량일 경우

특히 테이블 전체 스캔 후 정렬이 필요한 경우, 쿼리 성능 저하가 매우 두드러지게 나타납니다.

2. 실행 계획에서의 정렬 확인

Oracle에서 쿼리 실행 계획을 보면 정렬 연산은 다음과 같이 나타납니다:

SORT ORDER BY

이 단계가 포함되어 있다면, 정렬에 따른 자원 사용이 발생했음을 의미합니다. 예를 들어 다음과 같은 쿼리를 보겠습니다.

SELECT name, salary
FROM employee
ORDER BY salary DESC;

인덱스가 없다면, 전 직원 데이터를 불러온 뒤 정렬 작업이 추가로 수행됩니다. 반면, salary에 인덱스가 존재하면 Oracle은 그 인덱스를 활용해 정렬 작업 없이 데이터를 바로 가져올 수 있습니다.

3. 정렬 성능을 개선하는 팁

  • ORDER BY 대상 컬럼에 인덱스를 생성하면 성능 향상 가능성이 높습니다.
  • 불필요한 정렬을 제거할 수 있다면 제거하세요. 애플리케이션에서 정렬하는 방식도 고려해볼 수 있습니다.
  • LIMIT(FETCH FIRST n ROWS)와 함께 쓰는 경우, 인덱스를 활용하면 훨씬 효율적입니다.

예를 들어:

SELECT name
FROM employee
ORDER BY salary DESC
FETCH FIRST 10 ROWS ONLY;

이 쿼리는 상위 몇 개만 필요한 상황인데, 인덱스를 타면 훨씬 빠르게 처리됩니다.

4. 결론

ORDER BY는 눈에 보이지 않게 쿼리 성능을 잡아먹는 연산입니다. 특히 대용량 데이터 처리에서 정렬 연산은 치명적일 수 있으므로, 인덱스 구조와 실행 계획을 고려한 설계가 필요합니다.

정렬이 필요한 이유가 분명한지, 그리고 그것이 최적화된 형태로 실행되는지를 항상 점검하는 습관이 중요합니다.

#SQL기초 #ORDERBY #정렬성능 #실행계획 #쿼리최적화 #인덱스활용

반응형
LIST