순서를 명시한다
최신순, 가격순, 우선순위순처럼 화면이 기대하는 기준을 SQL에 직접 씁니다.
ORDER BY created_at DESC, id DESC
사용자가 어떤 순서를 기대하는지, 동점은 어떻게 처리할지, 인덱스가 그 순서를 도와줄 수 있는지를 한 번에 확인합니다.
최신순, 가격순, 우선순위순처럼 화면이 기대하는 기준을 SQL에 직접 씁니다.
ORDER BY created_at DESC, id DESC
정렬 컬럼 값이 같을 수 있다면 고유 키를 보조 정렬로 넣어 페이지 경계를 안정시킵니다.
ORDER BY price DESC, product_id ASC
keyset pagination은 마지막으로 본 정렬 키 이후를 읽는 방식입니다.
WHERE price < :price OR (price = :price AND id > :id)
필터 컬럼과 정렬 컬럼 순서가 인덱스와 맞으면 별도 Sort 비용을 줄일 수 있습니다.
INDEX(category, price DESC, id)
DBMS마다 NULL 기본 위치가 다르므로 사용자 기준이 있으면 명시합니다.
ORDER BY due_date NULLS LAST
대량 데이터에서는 Sort, temp, filesort, 읽은 행 수를 확인하고 인덱스를 조정합니다.
EXPLAIN SELECT ... ORDER BY ...
ORDER BY 2 같은 컬럼 번호 정렬은 SELECT 목록 변경에 약합니다.
LIMIT만 있는 쿼리는 어떤 행을 가져오는지 보장하지 못합니다.
OFFSET은 관리 화면, keyset은 무한 스크롤과 큰 목록에 어울립니다.