分页查询怎么做?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://idctop.com/article/484327.html

(0)
主机密钥不匹配怎么回事?服务器发送的主机密钥与存储在
上一篇 2026年7月12日 01:42
aspx网站如何清空用户名?用户名清空方法详解
下一篇 2026年2月7日 20:46

相关推荐

  • 如何附加mysql数据库?mysql数据库附加教程

    附加MySQL数据库的核心价值在于通过读写分离、数据归档或跨库关联,解决单机性能瓶颈并提升系统的高可用性与扩展性,这是构建企业级高并发应用架构的必经之路,在数字化转型的深水区,单一数据库实例已难以承载日益复杂的业务需求,许多开发者在初期为了追求上线速度,将所有数据堆砌在一个MySQL实例中,当日均请求量突破十万……

    2026年7月1日
    1510
  • 大模型SFT训练loss怎么看

    大模型SFT训练Loss的核心看点是观察其下降趋势与收敛稳定性,若Loss持续下降且验证集Loss未出现显著背离,则说明模型正在有效学习指令遵循能力;若出现Loss震荡或验证集Loss反弹,则需立即调整学习率或检查数据质量,SFT训练Loss的基础认知与核心指标在监督微调(Supervised Fine-Tun……

    2026年6月17日
    2310
  • 服务器怎么找客户端?服务器找客户端连接失败怎么解决

    服务器找客户端的核心机制是通过IP地址和端口号进行网络寻址,建立TCP/UDP连接,而非服务器主动“寻找”,而是客户端发起请求后服务器响应,很多人对网络通信存在误解,以为服务器像快递员一样满世界跑着找用户,服务器更像是一个24小时营业的银行柜台,它坐在那里不动,等待客户拿着身份证(IP)和窗口号(端口)来办理业……

    2026年7月7日
    12800
  • 生信AI大模型怎么用?生信分析常用工具推荐

    生信AI大模型通过整合多组学数据与深度学习算法,显著提升了基因组变异检测、蛋白质结构预测及药物发现的效率与精度,已成为生物信息学研究的核心基础设施,生信AI大模型如何重塑科研工作流传统的生物信息学分析往往依赖繁琐的手工代码和单一工具链,研究人员需要花费大量时间处理数据清洗、格式转换和参数调优,这种低效模式在面临……

    2026年6月14日
    4800
  • 大模型LoRA微调的Dropout怎么设?LoRA微调参数如何配置

    大模型LoRA微调时,Dropout建议设置为0.05至0.1之间,通常保持默认值0.1即可,除非显存极度受限或模型出现过拟合迹象,否则不建议随意调高,在微调大语言模型(LLM)时,很多开发者容易陷入一个误区,认为增加正则化参数就能自动提升模型效果,LoRA(Low-Rank Adaptation)本身已经通过……

    2026年6月17日
    3800
  • 服务器24核数够用吗,24核服务器适合做什么

    24核服务器适合高并发、虚拟化及大型数据库场景,其核心优势在于多任务并行处理能力,但需警惕单核主频可能低于低端机型,选型时应重点评估内存带宽与I/O性能,在云计算和数据中心领域,服务器配置的选择往往直接决定了业务系统的上限,当我们谈论“服务器24核数”时,实际上是在讨论一种介于入门级与旗舰级之间的黄金平衡点,这……

    2026年7月3日
    8300
  • 负载均衡服务等级协议是什么?SLA保障机制详解

    负载均衡服务等级协议(SLA)的核心在于承诺可用性、性能指标及违约赔偿,选择时需重点对比不同云厂商在跨区域容灾、故障恢复时间及赔付比例上的具体条款,在云计算的生态系统中,负载均衡(Load Balancer, SLB)就像交通指挥塔,决定了流量能否顺畅抵达后端服务器,对于企业而言,SLA不仅仅是一纸合同,更是业……

    2026年7月9日
    5600
  • 服务器客户端HTTP连接失败怎么办?HTTP协议详解

    服务器、客户端与HTTP协议构成了现代互联网通信的基石,三者通过标准化的请求-响应机制,实现了数据在广域网中的高效、安全传输,想象一下,你正在手机上浏览一个新闻网站,你的手指轻轻一点,这个动作触发了一个复杂的连锁反应,你的设备(客户端)向远方的计算机(服务器)发送了一个信号,而HTTP协议则是双方沟通的语言,如……

    2026年7月8日
    6500
  • 服务器阵列硬盘数据丢失怎么办?如何恢复RAID磁盘阵列数据

    “服务器阵列硬盘数据”通常指的是存储在 RAID(独立磁盘冗余阵列)系统中的数据,由于 RAID 技术通过条带化、镜像或校验等方式将数据分散存储在多块硬盘上,因此当发生硬盘故障、服务器宕机或误删除等情况时,数据恢复比单盘复杂得多,以下是关于服务器阵列硬盘数据的关键信息、常见故障及恢复建议:理解 RAID 类型与……

    2026年7月11日
    3800
  • ai大模型有哪几类模型,ai大模型分类有哪些

    AI大模型主要可分为生成式(AIGC)、判别式(分类/预测)、基础大模型(Foundation Models)以及垂直领域专用模型四大类,其中生成式大模型因具备文本、图像等多模态创作能力,成为当前应用最广泛的类型,理解AI大模型的分类,不能仅看技术名词,更要看它们在业务场景中解决什么具体问题,过去我们谈论AI……

    2026年6月14日
    3500

发表回复

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