技术与生活 / 一篇记录
分页的第一步,是确定什么叫“下一页”
分页需要稳定的排序规则,否则相邻页可能重叠或遗漏。
数据持续变化时,按偏移量切片可能在两次请求之间产生重复或遗漏。即使静态数据也需要明确排序,否则数据库没有义务按固定顺序返回行。
操作与观察
查询示例以 SQLite 为例;notes 为测试表,包含 id、title、score、category、created_at 字段。
SELECT id, title FROM notes ORDER BY id LIMIT 2 OFFSET 2;
比较第一页和第二页的记录,确认没有重复。
对唯一主键排序,再测试相邻页边界。对于顺序向后浏览的大数据集,可以评估按最后一个键继续查询,但要先定义新增和删除数据的处理规则。
使用键集分页时,最后一个键应该来自实际返回结果,并与排序方向一致。如果排序条件包含多个字段,游标也需要保留足够信息,不能只传一个不唯一的时间值。
别遗漏这条边界
大量深分页可能代价较高,连续浏览可考虑按最后一个主键继续取数。
参考:SQL 文档。