温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Cursor游标和分页有何区别

发布时间:2026-10-30 19:49:56 来源:亿速云 阅读:96 作者:小樊 栏目:数据库

在数据库和接口开发中,Cursor(游标)分页和**传统分页(Offset 分页)**是两种常见的数据获取方式,它们的核心区别如下:


一、传统分页(Offset / Limit 分页)

也称为 页码分页 或 基于偏移量的分页。

原理

通过 OFFSET 和 LIMIT 获取某一页数据:

SELECT * FROM orders
ORDER BY id
LIMIT 10 OFFSET 20;

表示跳过前 20 条,取 10 条(第 3 页)。

特点

  • ✅ 实现简单
  • ✅ 可随机跳页(第 1 页、第 10 页)
  • ❌ 数据量大时性能差(OFFSET 越大越慢)
  • ❌ 数据频繁变更时容易重复或漏数据

问题示例

  • 第 1 页取 10 条
  • 取第 2 页前,新增了 5 条数据
  • 第 2 页结果错位(重复或跳过)

二、Cursor 分页(游标 / 基于指针的分页)

也称为 基于游标的分页(Cursor-based Pagination)。

原理

使用上一次结果的最后一条数据的某个字段值作为“游标”:

SELECT * FROM orders
WHERE id > 100
ORDER BY id
LIMIT 10;

id = 100 就是 cursor。

特点

  • ✅ 性能稳定(索引查询,不扫描跳过数据)
  • ✅ 数据变更时不会重复或漏数据
  • ✅ 适合无限滚动、Feed 流
  • ❌ 不支持随机跳页
  • ❌ 实现稍复杂

常见 Cursor 类型

  • 自增 ID
  • 时间戳(如 created_at)
  • 复合游标(如 created_at + id)

三、核心区别对比

对比项 Offset 分页 Cursor 分页
是否支持跳页 ✅ 支持 ❌ 一般不支持
性能 随页数下降 稳定
数据一致性 易错位 高
实现复杂度 低 中
适用场景 后台管理 Feed、无限滚动

四、使用建议

  • 后台管理系统:Offset 分页(方便跳页)
  • 前端 Feed / 消息流:Cursor 分页(稳定、高效)
  • 大数据表:优先 Cursor

如果你愿意,我也可以给你 Spring / MyBatis / Elasticsearch / GraphQL 中的具体实现示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手