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 |

最低0.47元/天 解锁文章
2815

被折叠的 条评论
为什么被折叠?



