当前位置: 首页 > news >正文

数据库查询避免深分页问题

使用 cursor 换了一种分页方式,从根本上绕开 offset 带来的性能问题。

传统 page 会有“深分页问题”

SELECT*FROMfeedORDERBYcreated_atDESCLIMIT20OFFSET1000000;

问题在于:

  • 数据库仍然要扫描前 100 万条
  • 再丢弃前面的,只取 20 条

👉 本质是:offset 越大,性能越差(线性退化)

cursor 思路是:
👉不再跳过数据,而是“从上一次的位置继续查”

比如:

SELECT*FROMfeedWHEREcreated_at<last_timeORDERBYcreated_atDESCLIMIT20;

这里的last_time就是 cursor

如果用 ID 做游标(更常见):

SELECT*FROMfeedWHEREid<last_idORDERBYidDESCLIMIT20;

👉 数据库可以直接走索引,不需要扫描大量数据

关键区别

方式本质性能
page + offset跳过数据❌ 越翻越慢
cursor定位数据✅ 始终稳定

cursor 也有它的局限性
不能随便跳页
不能:

  • 直接跳到第 100 页

👉 只能:

  • 一页一页往下翻

需要稳定排序字段
必须满足:

  • 唯一
  • 单调递增

推荐:

  • id
  • (created_at, id)组合

数据变动问题
如果中间有新数据插入:
👉 可能出现:

  • 重复
  • 或漏数据

解决:

  • 使用“时间 + id”双 cursor

👉 标准做法:
后端:

WHEREid<last_idORDERBYidDESCLIMIT20

👉 更严谨版本:

WHERE(created_at,id)<(?,?)ORDERBYcreated_atDESC,idDESCLIMIT20
http://www.jsqmd.com/news/722823/

相关文章:

  • 427-evo tmux
  • 从CCPC河南省赛的“随机栈”题,聊聊贪心策略与模998244353的逆元处理技巧
  • Horos:免费开源医疗影像软件的完整指南与专业应用
  • 创智芯联冲刺港股:年营收6.4亿 姚成控制67%投票权
  • 医疗AI研究新突破:MedResearcher-R1框架解析
  • ComfyUI IPAdapter Plus技术架构解析:图像条件生成的高级实现方案
  • C#高性能ECS框架Arch:Archetype+Chunk模式与数据驱动设计实战
  • 低成本开源3D打印机械手设计与实现
  • ShellGPT:基于大语言模型的智能命令行助手原理与实践
  • Windows下PointNet2安装血泪史:从CUDA版本到VS环境变量,保姆级避坑指南
  • 基于Tauri构建跨平台桌面应用:lencx/ChatGPT项目技术解析与实践
  • 奢侈品鞋子AI融合系统:多角度拍摄与背景智能合成
  • LangChain与提示工程实战:构建高效AI应用的完整指南
  • Ministral 3高效密集语言模型解析与应用
  • 终极指南:使用FreeMove安全迁移Windows目录,彻底解决C盘空间不足问题
  • FPGA上基于LUT的深度神经网络优化与SparseLUT架构
  • 425-aguvis tmux
  • Linux内核原理与架构解析第3篇
  • LikeShop vs 主流SaaS电商平台对比矩阵(有赞 / 微盟 / Shopify)
  • Google Bard API逆向工程库PawanOsman/GoogleBard深度解析与实战
  • 多模态索引压缩技术AGC解析与应用实践
  • LLM梯度表示与动态路由机制解析
  • 开源虚拟数字人框架VirtualPerson:从架构解析到实战部署指南
  • Spring Boot项目里用FFmpegFrameGrabber处理视频,这5个实用方法你用过吗?
  • Windows Cleaner终极指南:告别C盘爆红的专业解决方案
  • 大语言模型在文档合规审计中的实践与优化
  • Apollo Save Tool完整指南:PS4存档管理的终极解决方案
  • I-CORE中微爱芯 AIP1629ASA32.TB SOP-32 LED驱动
  • Cursor Pro破解工具终极指南:3步轻松实现AI编程助手永久免费使用
  • 孤能子视角:“记忆“不是存储,是关系网的呼吸