分页查询怎么做?mysql分页查询优化

分页查询(Pagination)是数据库开发和 Web 应用中非常常见的功能,用于将大量数据分割成较小的页面,以提高加载速度和用户体验。

以下是关于分页查询的详细介绍,包括原理、常见实现方式、优缺点对比以及最佳实践。

WPF 中如何制作 DataGrid 的分页功能
加载中
WPF 中如何制作 DataGrid 的分页功能

为什么需要分页?

  • 性能优化:一次性加载成千上万条数据会消耗大量内存和带宽,导致响应缓慢甚至服务器崩溃。
  • 用户体验:用户更容易浏览少量数据,而不是面对一个无限滚动的长列表。
  • 资源限制:数据库和网络传输都有带宽和内存限制。

常见的分页方式

✅ 方式一:基于偏移量的分页(Offset Pagination)

这是最传统、最常用的分页方式,使用 LIMITOFFSET 子句。

SQL 示例(MySQL):

-- 查询第 2 页,每页 10 条数据
SELECT  FROM users
ORDER BY id ASC
LIMIT 10 OFFSET 10;

优点:

  • 实现简单,几乎所有数据库都支持。
  • 可以直接跳转到任意页(如第 100 页)。

缺点:

  • 深分页问题(Deep Pagination):当 OFFSET 值很大时(如 OFFSET 100000

    分页查询怎么做?mysql分页查询优化

    ),数据库需要扫描并丢弃前 100,000 条记录,性能急剧下降。

  • 数据一致性:如果在分页过程中有新数据插入,可能导致数据重复或遗漏。

✅ 方式二:基于游标的分页(Cursor Pagination / Keyset Pagination)

通过记录上一页最后一条数据的“键值”(如 ID 或时间戳)来查询下一页数据。

SQL 示例(MySQL):

-- 假设上一页最后一条数据的 id 是 100
SELECT  FROM users
WHERE id > 100
ORDER BY id ASC
LIMIT 10;

优点:

  • 高性能:无论查询第几页,性能基本一致,因为使用了索引快速定位。
  • 数据一致性:不受插入/删除操作影响,不会出现数据重复或遗漏。

缺点:

  • 不能直接跳转到任意页(只能“下一页”或“上一页”)。
  • 需要业务字段具有唯一性且有序(如自增 ID、创建时间)。

✅ 方式三:基于范围的查询(Range Query)

类似游标分页,但使用范围条件,常用于时间范围或 ID 范围。

SQL 示例:

SELECT  FROM orders
WHERE created_at > '2026-01-01 00:00:00'
ORDER BY created_at ASC
LIMIT 10;

分页查询怎么做?mysql分页查询优化

分页查询的最佳实践

场景 推荐分页方式 说明
小数据量(< 1000 条) Offset Pagination 简单直接,性能影响小
大数据量 + 需要跳转页码 Offset Pagination + 优化 避免过大的 OFFSET,可考虑限制最大页数
大数据量 + 只需“下一页” Cursor Pagination 性能最优,适合无限滚动列表(如社交媒体)
实时性要求高 Cursor Pagination 避免数据重复或遗漏

后端代码示例(Java / Spring Boot)

使用 Offset Pagination

public Page<User> getUsers(int page, int size) {
    int offset = page  size;
    List<User> users = userRepository.findAllByOrderByCreatedAtDesc(
        PageRequest.of(page, size)
    );
    long total = userRepository.count();
    return new PageImpl<>(users, PageRequest.of(page, size), total);
}

使用 Cursor Pagination

public List<User> getNextUsers(String lastCursorId, int size) {
    // lastCursorId 是上一页最后一条数据的 ID
    return userRepository.findByIdGreaterThanOrderByCreatedAtDesc(lastCursorId, size);
}

分页查询怎么做?mysql分页查询优化

前端展示建议

  • 显示页码:适合 Offset 分页,允许用户跳转。
  • 无限滚动(Infinite Scroll):适合 Cursor 分页,用户向下滚动自动加载下一页。
  • 显示总数:如“共 1000 条,第 1/100 页”,帮助用户了解数据规模。

常见问题与解决方案

问题解决方案
OFFSET 很大时查询慢改用 Cursor 分页,或优化索引
分页数据重复确保 ORDER BY 字段唯一,或使用 Cursor 分页
总页数计算错误使用 COUNT() 查询总数,但注意 COUNT 在大表上也可能慢,可考虑缓存总数
高并发下性能瓶颈添加缓存(如 Redis),或使用搜索引擎(如 Elasticsearch)进行分页

  • 小数据量:用 LIMIT + OFFSET,简单高效。
  • 大数据量 + 需要跳转:用 LIMIT + OFFSET,但限制最大偏移量。
  • 大数据量 + 无限滚动:用 Cursor 分页,性能最优。

根据你的业务需求选择合适的分页策略,可以显著提升系统性能和用户体验。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/484327.html

(0)
主机密钥不匹配怎么回事?服务器发送的主机密钥与存储在
上一篇 2026年7月12日 01:42
python种子怎么设置?python随机数种子用法
下一篇 2026年7月12日 01:48

相关推荐

  • 如何实现服务器端刷新客户端?服务器主动推送数据给前端

    服务器端刷新客户端的核心在于通过WebSocket或Server-Sent Events(SSE)建立持久连接,由服务端主动推送数据变更指令,从而避免客户端频繁轮询带来的高延迟与资源浪费,在传统的前后端交互模式中,客户端像是一个不断询问“有新消息吗?”的焦急访客,而服务器则像是一个忙碌的管家,每次都要停下来查看……

    2026年7月8日
    20000
  • fbreader怎么用?安卓手机免费电子书阅读器推荐

    FBReader 是一款非常经典且广受欢迎的开源电子书阅读器,主要用于 Android 和 iOS 平台(也有桌面版,但移动端最为常用),它以轻量、快速、支持格式多以及高度可定制而著称,以下是关于 FBReader 的核心信息和使用指南:主要特点格式支持广泛:原生支持:EPUB, FB2, FB2.ZIP, M……

    2026年7月12日
    9600
  • 大模型微调数据集泄露怎么办?数据泄露怎么补救

    大模型微调数据集泄露后,首要动作是立即切断模型推理接口并隔离训练环境,随后依据泄露数据的敏感等级启动法律合规流程,通过技术溯源与公关预案双管齐下,将声誉与合规风险降至最低,在人工智能快速渗透各行各业的今天,微调数据集往往承载着企业最核心的商业机密或用户隐私,一旦这些数据在训练过程中或发布后发生泄露,后果远比传统……

    2026年6月17日
    3410
  • 服务器怎么安装网站?个人网站搭建教程

    服务器安网站的核心在于选择匹配业务规模的云主机或独立服务器,并通过配置Web服务器软件(如Nginx或Apache)与域名解析来完成部署,整个过程需重点关注安全性与性能优化,很多人认为买个服务器就能直接建站,其实这只是第一步,真正的难点在于如何让这个“铁盒子”稳定、安全且快速地响应全球用户的访问请求,2026年……

    2026年7月10日
    18000
  • IDC维护时如何修改描述,有哪些注意事项?

    修改IDC描述(UpdateIDcs)是IDC维护中的标准操作,通过API或管理控制台即可完成,核心是确保描述信息准确反映机房状态,避免管理混乱,IDC维护注意事项:描述修改的必需场景在IDC日常维护中,修改描述往往被忽视,但实际需求相当频繁,行业共识认为,以下场景必须及时更新描述,机房搬迁时描述必须更新当ID……

    2026年8月4日
    1000
  • 面问升级新域名后如何访问,面问官网最新地址是什么?

    面问升级过程中,用户应通过官方发布的最新备案域名进行访问,并建议在浏览器缓存清理后通过HTTPS加密协议进行连接以确保数据安全,面问域名升级背景与访问核心逻辑域名迁移的技术必要性在互联网基础设施不断升级的背景下,大型平台进行域名迁移是提升系统性能与安全性的常规操作,域名升级通常涉及服务器架构的重组、负载均衡策略……

    2026年7月13日
    500
  • 如何查询ICP域名备案?,备案信息管理方法是什么?

    ICP备案查询和日常管理是网站合法运营的基础,核心是通过官方平台完成信息核验与变更,只要备案状态正常且信息与当前主体一致,就不影响网站正常使用,为什么备案查询不是查一次就完事很多站长以为备案通过就一劳永逸,但行业共识认为,备案是一个持续的状态管理,域名备案信息变更是常见场景,比如公司营业执照地址变了、法人换了……

    2026年8月21日
    300
  • 为什么AI被称为大模型?大模型具体是指什么

    AI被称为“大模型”,核心原因在于其参数量达到千亿甚至万亿级别,且基于深度学习算法,具备处理海量数据并模拟人类认知的能力,这个称呼听起来有些技术化,但如果我们把它拆解开来,其实非常直观,你可以把AI想象成一个正在读书的学生,而“大”指的是他读过的书多,“模型”指的是他读书的方法论,为什么叫“大”?这里的“大……

    2026年6月14日
    3800
  • isnan函数在高级表格后台排序中怎么用,有哪些步骤

    isnan()函数用于判断一个值是否为NaN,而高级表格的后台排序功能则是将排序逻辑交给服务器处理,两者结合可实现海量数据下的精准排序,确保数值列排序不出现“10小于2”的尴尬结果,isnan()函数是什么?先搞懂它的判断逻辑isnan()是JavaScript的全局函数,全名是“is Not a Number……

    2026年8月20日
    100
  • IT网站制作策划中的产品策划模块如何做,有哪些注意事项

    在it网站制作策划中,产品策划模块的核心职责,是把“你要做什么网站”翻译成开发和技术都能看懂的执行文档,同时确保每个页面都覆盖用户真实搜索意图, 它不负责视觉好不好看,也不负责代码怎么实现,它负责的是网站的逻辑骨架、页面优先级以及内容与搜索意图的匹配度,很多企业网站上线后转化率低,问题恰恰出在策划阶段——栏目结……

    2026年8月19日
    600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(1条)

  • 汤娟
    汤娟 2026年7月12日 23:07

    说实话一开始是标题党点进来的,没想到分页这块还真讲了点东西。文章能写到这个程度算用心了,已转给朋友看。