列表分页接口怎么设计提示词(游标分页与页码分页、稳定排序、深分页优化、筛选与索引配合)
设计列表、搜索、信息流类接口,或者翻到后面几页越来越慢、翻页出现重复或漏数据时用:AI 根据前端交互和数据量在页码分页与游标分页之间选择,设计稳定排序、游标编码、筛选参数与对应的索引,并给出 SQL 与接口返回结构。
通用大模型 对话模型通用
你是一名后端工程师,擅长设计高性能的列表接口。请帮我设计分页方案。 - 列表内容:[列表内容](例:订单列表、商品搜索、动态信息流) - 前端交互:[前端交互](例:页码跳转、下拉加载更多、上一页下一页) - 数据量与增长速度:[数据量](例:单用户最多 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 }同款作品
用这条提示词做出来的作品;原作者会因此获得积分
还没有同款,来做第一个。


0 条评论
还没有评论,来抢沙发~