跳至正文
← 全部技术洞察

TECHNICAL INSIGHTS / 技术洞察

.NET API 分页怎么设计,才能兼顾性能与数据变化?

分页接口在数据少时运行正常,数据增多后却变慢;用户翻页时还可能看到重复记录。分页需要同时考虑查询成本、稳定排序和数据变化,不能只在 SQL 后面加一个页码参数。

排序必须具有确定性

仅按发布时间排序时,多条相同时间记录之间可能没有固定顺序。可结合唯一标识建立明确排序,并确保下一页规则使用相同字段。对持续变化的数据,还需说明是否允许翻页期间新增记录影响结果。

根据访问方式选择分页

后台需要跳到任意页,与用户连续向后浏览,是不同需求。偏移分页易于表达页码,但深页查询可能更昂贵;键集分页适合连续浏览,却需要维护游标语义。不要为了性能改变用户操作方式而不做说明。

限制单次数据范围

为页大小设置合理上限,只返回页面需要的字段。总数统计在复杂条件下也可能昂贵,应判断用户是否真的需要精确总页数。查询优化要结合实际执行计划和参数分布。

验收边界与并发变化

测试相同排序值、大页码、空页、删除记录和浏览期间新增数据。使用真实量级样本比较响应时间与数据库消耗,避免只看几十条测试数据。

常见问题:游标可以直接使用上一页最后一个 ID 吗?

只有当排序规则与 ID 对应且边界定义清楚时才合适;按时间等多字段排序时,应包含必要的排序信息。

技术参考:微软:EF Core 高效查询。具体接口与配置请结合使用版本核对。

将评估落实到你的系统

如果内部团队需要把这些约定落到可运行的工程中,可以通过微服务基础架构建设沟通接口、公共能力与交接范围,先以一个业务场景验证方案。