Q. 아이템이 총 100만 건이 있는 상황에서 offset 방식의 쿼리로 50만 번째 아이템이 있는 페이지를 조회한다고 했을 때 성능이 어떨까요?
- DB는 지정된 offset 값까지의 모든 행을 스캔하게 됨
- 따라서 offset 값이 커질수록 쿼리 시간이 선형적으로 증가
SELECT * FROM news
ORDER BY id
OFFSET 1000
LIMIT 10;- 위 쿼리 실행 시 DB는 1,010개 행을 읽은 뒤 앞의 1,000개 행을 버리고 남은 10개 행만 반환
- 결국 페이지가 많아질수록 앞의 페이지까지 전부 조회하고 있는 셈
SELECT * FROM news
WHERE id > 123
ORDER BY id
LIMIT 10;- 특정 항목 이후부터 조회하는 방식
- 다만 올바른 인덱스 및
ORDER BY조건 필요 - 페이지별 초기 id 값을 정확히 예측할 수 있다면 offset 없이도 조회가 가능해짐