分页查询接口设计最佳实践

0. 结论

优点 缺点 适用场景 设计关注点
基于页码的分页(Offset-based pagination) 1. 支持任意页跳转,灵活性高 2. 支持多页同时查询3. 实现简单,理解和开发成本低 1. 深翻页时性能差 2. 数据频繁变化,查询时可能导致数据丢失 1. 数据量小于1w的系统 2. 数据变化不频繁
基于游标的分页(Cursor-based Pagination) 1. 性能稳定 2. 游标规则灵活,API不变的情况下可以拓展游标语义 3. 保证数据一致性,适用于数据频繁变化场景 1. 无法跳页,只能顺序访问 2. 不支持多页同时查询3. 实现更为复杂,需考虑唯一性、游标设计 1. 数据量大的系统 2. 数据变化频繁 1. MaxResults != PageSize 2. NextToken != ID

1. 分页查询接口

1.1 基于页码的分页(Offset-based Pagination)

基于页码的分页(Offset-based Pagination)通常通过指定页码(PageNumber)和每页的数据量(PageSize)来实现。客户端请求指定页码的内容,服务端则根据 PageNumber 和 PageSize 计算出查询范围,并返回 TotalCount。例如,假设每页显示10条数据,查询第3页时,offset = (3 - 1) * 10 = 20。查询结果为从第21条到第30条数据。

offset 简单地说是你希望跳过的记录数。随着记录数量的增加,这种方法会变得越来越慢,因为数据库仍然需要读取到 offset 指定的行数,才能知道它应该从哪里开始选择数据。这通常被描述为 O(n) 复杂度,意味着这通常是最坏的情况。以下面的查询 SQL 为例:

select * from xxx order by id ASC limit yyy offset zzz;
查询场景 SQL执行耗时
Offset 0, Limit 10 0.025ms
Offset 10000, Limit 10 3.138ms
Offset 50000, Limit 10 16.933ms
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值