병목이 어디서 시작되는지 먼저 구분하면 대응이 빨라집니다.
같은 그룹으로 나눌수록 다음 단계의 작업 단위가 정해집니다.
읽기 순서가 어긋나면 큰 정렬 비용이 먼저 발생합니다.
같은 창을 여러 번 돌리거나 파티션이 크면 계산이 무거워집니다.
| 비교 축 |
원인 1
정렬 부담이 큼
|
원인 2
같은 창을 반복 계산
|
원인 3
파티션이 너무 큼
|
|---|---|---|---|
| 느린 이유 | 파티션을 나눈 뒤 다시 정렬해야 해서 큰 정렬 작업이 생깁니다. | 같은 OVER (...) 를 함수마다 반복하면 같은 기준을 여러 번 계산합니다. |
한 파티션에 너무 많은 행이 모이면 메모리 사용량과 계산 범위가 함께 커집니다. |
| 먼저 볼 것 | PARTITION BY 와 ORDER BY 컬럼 순서가 인덱스와 맞는지 확인합니다. |
여러 함수가 정말 같은 창 정의를 공유하는지 확인합니다. | 필요 없는 기간, 상태, 그룹까지 한 번에 읽고 있지 않은지 확인합니다. |
| 대표 대응 | PARTITION BY dept ORDER BY salary 흐름에 맞춘 인덱스로 읽기 순서를 미리 정리합니다. |
WINDOW w AS (...) 로 같은 창 정의를 묶어 재사용합니다. |
WHERE order_date >= ... 처럼 범위를 먼저 줄여 필요한 행만 남깁니다. |
| 왜 효과가 있는가 | 정렬 작업이 줄어들어 윈도우 계산 전 준비 비용이 가벼워집니다. | 중복 계산을 피해서 같은 창을 다시 해석하고 실행하는 부담이 줄어듭니다. | 큰 파티션 때문에 생기던 메모리 부담과 대형 계산 범위를 함께 줄일 수 있습니다. |