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

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

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

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

为什么需要分页?

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

常见的分页方式

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

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

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

相关推荐

  • 如何设置IdeaHub画质,画质怎么调清晰度?

    调整IdeaHub画质,核心在于根据使用环境光、内容类型和个人偏好,依次调好亮度、对比度、清晰度与色彩参数,多数场景下几步操作就能让画面更真实、通透, 默认设置往往偏亮或偏冷,手动微调后,会议文字更锐利,视频肤色更自然,为什么需要手动调整IdeaHub画质IdeaHub出厂预设的画面风格偏向高亮和鲜艳,目的是在……

    2026年8月19日
    600
  • 服务器上门维修靠谱吗?服务器上门维修收费标准

    服务器上门维护是解决企业IT基础设施突发故障、保障业务连续性的最高效手段,尤其适用于数据敏感、网络环境复杂或急需现场技术支持的场景,在数字化浪潮席卷全球的今天,企业的核心业务早已从简单的网页展示转向了复杂的云端协同与大数据处理,当服务器出现宕机、硬件故障或网络异常时,远程技术支持往往显得力不从心,专业的技术人员……

    2026年7月5日
    20010
  • 大模型部署成本告警怎么配置?大模型部署成本优化方案

    大模型部署成本告警配置的核心在于建立基于显存占用、Token吞吐量及API调用频率的多维监控体系,通过设定动态阈值实现从“事后核算”到“事前拦截”的转变,从而有效控制预算超支风险,随着大语言模型(LLM)在企业级应用中的普及,算力成本已成为制约业务扩展的关键瓶颈,许多团队在初期部署时往往只关注模型精度和响应速度……

    AI资讯 2026年6月18日
    2500
  • FlashFXP连不上云服务器怎么办?FlashFXP连接云服务器失败解决方法

    使用FlashFXP连接云服务器,核心在于正确配置SFTP协议、填写服务器IP及端口,并验证私钥或密码,通常1-3分钟内即可完成稳定连接,很多刚接触服务器运维的朋友,在尝试通过FlashFXP连接云服务器端时,往往会在“连接超时”或“认证失败”这两个环节卡壳,这并非软件本身的问题,而是对SFTP协议特性及服务器……

    2026年7月8日
    16300
  • 服务器一键建站软件好用吗?,哪个性价比最高

    服务器一键建站软件的核心价值在于让非技术人员也能在几分钟内完成网站部署,免去手动配置环境的繁琐步骤,同时保持运维效率与安全性,服务器一键建站软件是什么?适合谁用?核心功能与适用场景这类软件本质是运行在服务器上的图形化管理面板,将Nginx、Apache、MySQL、PHP等组件打包成可视化安装包,并附带网站管理……

    2026年7月15日
    1900
  • 荣耀ai大模型技术是什么?荣耀ai大模型技术有哪些应用场景

    荣耀AI大模型技术通过端侧算力优化与云端协同,实现了隐私安全、低延迟响应及离线可用性的全面突破,成为2026年智能终端体验升级的核心驱动力,荣耀AI大模型的核心架构与端云协同机制在2026年的智能终端市场,单纯依赖云端处理已无法满足用户对即时性的极致追求,荣耀选择了一条更为务实且高效的技术路径,即构建“端侧大模……

    2026年6月14日
    3700
  • 华为云OBS开发难不难,有哪些常见问题?

    华为云OBS开发的核心答案:通过官方SDK、RESTful API或S3兼容接口,开发者可在30分钟内完成从账号配置、创建桶到上传下载文件的完整流程, 这套对象存储服务提供高可用、低成本的数据存储方案,适合Web应用、大数据分析、备份归档等场景,华为obs开发前需要准备什么动手写代码之前,得先把环境和工作路径理……

    2026年8月21日
    500
  • 如何访问云平台数据库?云平台数据库连接方法

    访问云平台数据库的核心在于通过内网专线或加密公网通道建立安全连接,优先选择VPC内网访问以规避公网延迟与安全风险,同时配合IAM权限最小化原则确保数据合规,在数字化转型的深水区,数据已成为企业的核心资产,许多企业在构建云架构时,往往忽略了数据库访问这一关键环节的安全性与效率,传统的物理机房访问模式与云端分布式架……

    2026年7月6日
    7000
  • 服务器阵列怎么调?服务器RAID配置教程

    服务器阵列调优的核心在于根据业务负载特性选择RAID级别,并通过RAID卡缓存策略与磁盘I/O调度算法的协同配置,实现性能与数据安全的最佳平衡,理解阵列基础与场景匹配在服务器运维中,磁盘阵列(RAID)并非简单的硬盘堆砌,而是数据保护与性能提升的工程艺术,许多初学者容易陷入“RAID级别越高越好”的误区,实则不……

    2026年7月8日
    13500
  • img_onerror_事件怎么用,图片加载失败怎么办?

    img_onerror_是前端处理图片加载失败的核心事件,通过它你可以优雅地控制图片错误后的行为,直接提升用户体验和网站SEO表现,img_onerror_是什么?为什么每个网站都需要它img_onerror_是绑定在HTML图片元素上的一个事件,当图片因网络故障、路径错误、格式不支持或服务器返回异常而无法加载……

    2026年8月17日
    500

发表回复

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

评论列表(1条)

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

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