列表分页接口怎么设计提示词(游标分页与页码分页、稳定排序、深分页优化、筛选与索引配合)

设计列表、搜索、信息流类接口,或者翻到后面几页越来越慢、翻页出现重复或漏数据时用:AI 根据前端交互和数据量在页码分页与游标分页之间选择,设计稳定排序、游标编码、筛选参数与对应的索引,并给出 SQL 与接口返回结构。

NNathaniel bigo··原创首发·AI 辅助撰写
通用大模型 对话模型通用
你是一名后端工程师,擅长设计高性能的列表接口。请帮我设计分页方案。

- 列表内容:[列表内容](例:订单列表、商品搜索、动态信息流)
- 前端交互:[前端交互](例:页码跳转、下拉加载更多、上一页下一页)
- 数据量与增长速度:[数据量](例:单用户最多 10 万条,每天新增频繁)
- 筛选与排序需求:[筛选与排序](例:按状态筛选,按创建时间或金额排序)
- 数据库:[数据库]
- 表结构与现有索引:
  [粘贴表结构]

请输出:
1. 方案选择:页码分页(偏移量)与游标分页(基于上一页最后一条记录)的对比——跳页能力、深分页性能、数据频繁新增时的重复与遗漏、总数统计的成本;结合我的前端交互给出推荐,可以组合使用。
2. 稳定排序:排序字段可能重复(如同一时间创建)时,追加唯一字段作为第二排序键,保证翻页结果确定。
3. 游标设计(如果使用):游标包含哪些字段、如何编码成不透明的字符串、如何防止被篡改或校验格式;排序方向切换时的处理;多字段排序时的比较条件写法。
4. 页码分页的优化(如果使用):深分页的问题与优化手段(如先查主键再回表、限制最大页数);总数统计的开销与替代方案(例如只显示「还有更多」或使用估算值)。
5. 参数设计:每页数量的默认值与上限、筛选参数的命名与校验、排序字段的白名单。
6. 索引:根据筛选和排序条件设计联合索引,说明字段顺序的理由。
7. 返回结构:数据列表、下一页游标或总数、是否还有更多。
8. 给出完整的 SQL 和接口实现代码。

高亮处换成你自己的内容:[列表内容]、[前端交互]、[数据量]、[筛选与排序]、[数据库]、[粘贴表结构]

ChatGPT Plus 充值

已被复制 0 次

使用说明

怎么填变量:[前端交互] 决定方案:需要「跳到第 37 页」时只能用页码分页;下拉加载更多、上一页下一页,用游标分页更快也更准确。[表结构与现有索引] 要贴,分页性能最终取决于索引能否覆盖筛选和排序。

常见坑:

  • 只按创建时间排序,同一秒内创建的记录顺序不确定,翻页时会出现重复或漏掉。追加主键作为第二排序键。
  • 信息流使用偏移量分页,用户翻页期间有新内容插入,下一页就会出现上一页已经看过的内容。
  • 每次请求都统计总数,在大表上非常慢。很多场景下只需要知道「还有没有下一页」。

追问技巧:追问「列表需要同时支持按金额和按时间排序,游标该怎么设计」,或「这个列表接口如何加缓存,数据更新后怎么失效」。

示例输出

示例,仅供参考(订单列表,按创建时间倒序,游标分页)
sql
-- 索引:等值筛选字段在前,排序字段在后
CREATE INDEX idx_orders_user_status_time ON orders (user_id, status, created_at DESC, id DESC);

-- 第一页
SELECT id, order_no, amount, created_at FROM orders
WHERE user_id = ? AND status = ?
ORDER BY created_at DESC, id DESC
LIMIT 21;                       -- 多取 1 条,用于判断是否还有下一页

-- 下一页:游标解码得到上一页最后一条的 (created_at, id)
SELECT id, order_no, amount, created_at FROM orders
WHERE user_id = ? AND status = ?
  AND (created_at < ? OR (created_at = ? AND id < ?))
ORDER BY created_at DESC, id DESC
LIMIT 21;
json
{ "items": ["……20 条……"], "nextCursor": "eyJ0IjoiMjAyNi0xMC0wN1QxMDowMDowMFoiLCJpZCI6OTg3fQ", "hasMore": true }

同款作品

用这条提示词做出来的作品;原作者会因此获得积分

做同款

还没有同款,来做第一个。

Nathaniel 的更多内容

同主题

同模型

0 条评论

登录 后参与评论

还没有评论,来抢沙发~