列表分頁接口怎麼設計提示詞(游標分頁與頁碼分頁、穩定排序、深分頁優化、篩選與索引配合)

設計列表、搜尋、資訊流類接口,或者翻到後面幾頁越來越慢、翻頁出現重複或漏數據時用: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 條評論

登入 後參與評論

還沒有評論,來搶沙發~