정렬은 공짜 아님
SQL 은 명시적 ORDER BY 없으면 정렬 보장 없음. 어제 '우연히' 정렬돼서 온 쿼리가 plan 이 다른 access path 고르면 내일 조용히 순서 바뀜. 순서 중요할 때 항상 ORDER BY.
정렬
- 오름차순이 default;
ORDER BY price DESC가 내림차순. - 다중 컬럼은 사전식:
ORDER BY category, price DESC. NULLS FIRST/NULLS LAST가 NULL 위치 제어 (PostgreSQL extension).- 계산 표현식 또는 컬럼 위치 (
ORDER BY 2 DESC) 로도 정렬 — 둘 다 적법, 표현식이 더 readable.
페이지네이션 — OFFSET 이 스케일 멈추는 이유
LIMIT 10 OFFSET 100 도 처음 100 행 읽고 버려야 함. 1000 페이지에선 요청당 10000 행 버림. 커서 기반 (keyset) 페이지네이션이 스케일 답: 마지막 본 값으로 필터, 그다음 LIMIT. OFFSET 없음, 페이지 깊이 무관 일정 비용.