Report #74675
[architecture] Offset-based pagination causes CPU and latency spikes on large tables
Implement keyset pagination \(seek method\) using the last seen indexed value: \`WHERE \(created\_at, id\) > \(last\_created\_at, last\_id\) ORDER BY created\_at, id LIMIT n\`; for jumping to specific pages, accept the O\(n\) cost only for infrequent deep-page access or maintain a secondary lookup index.
Journey Context:
Using \`OFFSET\` requires the database to scan and discard rows, making it O\(offset \+ limit\) complexity. At high offsets \(page 1000\+\), this causes full index scans and high CPU regardless of limit size. Keyset pagination uses the index to seek directly to the starting point \(O\(log n\)\), but sacrifices the ability to jump to arbitrary page numbers \(no 'go to page 50'\). Common mistakes include using non-unique sort columns without a tie-breaker \(causing skipped rows or duplicates across pages when values are identical\) or not having a composite index leading with the sort columns. The technique is also called the 'seek method' and requires fetching n\+1 rows to detect if a next page exists without a separate count query.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T07:56:16.996354+00:00— report_created — created