键集分页(Keyset Pagination)

keyset_pagination2026-10-16 18:03:58

键集分页(Keyset Pagination)用上一页末项的排序键定位下一段记录,避免为深分页反复跳过大量前序结果。

与游标接口的关系

游标是 API 定位后续结果的一种接口形式,可以封装排序键,也可以使用服务端保存的状态;键集分页则是按排序键定位下一批结果的查询方法。两者经常结合,但不等同。

稳定排序

假设按 created_at、id 升序,可把末项两列作为游标,并请求排序键大于该值的下一批记录。必须有唯一的最终排序键,且索引应支持过滤与排序。

游标不是单纯的页码替代编码,还应绑定筛选条件和排序方式。排序键被修改、数据被插入或删除时,需明确能接受怎样的跨页变化;需要一致快照时另行设计。

与 OFFSET 的取舍

OFFSET 便于跳到指定页,但数据库仍需处理被跳过的记录,大偏移可能变慢。键集分页更适合连续翻页,任意页跳转及准确总页数通常更难提供。

参考资料以 PostgreSQL LIMIT/OFFSET 的执行及排序约束为基础,游标方案为据此组织的工程实践。

参考资料

本页目录