핵심 병목

윈도우 함수는 계산보다 정렬 비용이 먼저 커집니다.

대량 데이터에서 느려지는 지점은 보통 함수 자체보다 PARTITION BY와 ORDER BY를 만족시키기 위한 정렬입니다.

학습 포인트

복합 인덱스가 정렬 순서와 맞으면 윈도우 함수에 들어가는 입력을 더 쉽게 정렬된 상태로 읽을 수 있습니다.

이 쿼리가 요구하는 순서
PARTITION BY department ORDER BY salary DESC

정렬을 다시 만드는 경우

인덱스 없음
1
대상 행을 먼저 읽음

행은 모였지만 부서별, 급여순으로 정렬되어 있지 않습니다.

2
DB가 별도 Sort 수행

윈도우 함수가 요구하는 순서를 맞추기 위해 추가 작업이 생깁니다.

3
그 뒤에 WindowAgg 계산

행 수가 많을수록 정렬 단계가 전체 응답시간을 밀어 올립니다.

결과: 윈도우 함수가 느린 것처럼 보여도 실제 병목은 Sort인 경우가 많습니다.

정렬 순서를 맞춰 두는 경우

INDEX (department, salary DESC)
1
부서, 급여 내림차순으로 읽기 시작

윈도우 함수가 요구하는 순서와 읽기 순서가 가까워집니다.

2
추가 Sort 부담 감소

이미 맞춰진 순서를 활용하므로 정렬 비용을 크게 줄일 수 있습니다.

3
WindowAgg가 바로 계산

정렬 준비가 줄어든 만큼 대량 데이터에서 차이가 더 크게 드러납니다.

결과: 튜닝 포인트는 함수 변경보다 정렬 순서와 인덱스 순서를 맞추는 것에 있습니다.
실무에서 확인할 순서