分页查询怎么做?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

相关推荐

  • 大模型事实性如何评估?大模型事实性评估指标有哪些

    评估大模型事实性的核心在于构建“检索增强+多源交叉验证+人类反馈”的闭环体系,单纯依赖模型内部知识已无法满足2026年对准确性的严苛要求,在2026年的技术语境下,大模型不再仅仅是概率预测机器,而是被要求成为可靠的决策辅助工具,事实性(Factuality)评估早已超越了简单的“对错判断”,演变成一套复杂的系统……

    2026年6月21日
    2610
  • IP数据报和DDM的具体分片过程是怎样的?,有什么方法

    IP数据报分片是网络层根据MTU切割数据包的底层机制,而DDM分片是分布式数据库中间件按规则拆分业务数据的上层逻辑,两者虽都叫“分片”,但作用域和实现路径完全不同,不同网络环境MTU值下IP数据报分片机制当一台主机要发送数据时,网络层会把数据封装成IP数据报,但物理网络能承载的数据帧大小是有限的,这个限制就是最……

    2026年8月17日
    400
  • IE版本检测显示IE 10怎么办?,怎么查看版本

    检测IE10版本的最可靠方法是通过用户代理字符串中的“MSIE 10.0”标识,结合条件注释或特性检测,而非依赖单一的判断方式,为什么还需要进行IE10版本检测尽管IE浏览器在2022年正式退役,但行业共识认为,在政企内部系统、工业控制平台以及某些特定行业的遗留应用中,IE10依然占据着相当一部分的使用比例,如……

    2026年8月17日
    400
  • 如何用IDEA进行远程调试?,idea remote debug断点不生效原因

    IDEA远程调试的核心在于通过配置JVM的调试代理参数,让本地IDE与远程应用建立连接,从而实时断点追踪问题,不论你是调试线上Spring Boot应用还是排查Docker环境中的异常,按以下步骤操作即可直接上手,为什么需要远程调试:场景与痛点多数情况下,本地环境无法完全复现线上问题,比如高并发下的数据竞争或第……

    2026年8月18日
    300
  • AI大模型调研报告可信吗?2026年最新AI大模型应用趋势

    2026年AI大模型已从“技术尝鲜”全面转向“垂直场景落地”,企业选型核心不再是参数规模,而是私有化部署成本、数据安全性及行业专用模型的微调效果,2026年大模型市场格局与选型逻辑通用大模型与垂直模型的博弈过去两年,市场上充斥着对千亿参数通用大模型的盲目崇拜,到了2026年,行业共识认为,通用大模型在特定专业领……

    2026年6月12日
    5500
  • 服务器漏洞探测软件哪个好用?网络安全漏洞扫描工具推荐

    服务器漏洞探测软件是保障数字资产安全的“体检仪”,通过自动化扫描与深度分析,能在黑客利用前精准定位并修复系统弱点,建议优先选择支持持续监控与合规报告生成的专业工具,在数字化转型的浪潮中,服务器如同企业的数字心脏,一旦停跳或感染病毒,后果不堪设想,许多运维人员常陷入一个误区:认为安装了防火墙就万事大吉,防火墙只能……

    2026年7月6日
    17810
  • 服务器分客户端该如何操作,服务器客户端架构怎么搭建?

    服务器与客户端架构详解什么是客户端-服务器架构 (C/S 架构)?客户端-服务器架构(Client-Server Architecture,简称 C/S 架构)是一种分布式应用程序的结构,它将任务分配给提供资源或服务的服务器(Server)以及请求这些服务的客户端(Client),在这种模式下,两者通过网络进行……

    AI资讯 2026年7月13日
    13200
  • 佛山哪个云主机最便宜又稳定,性价比高不高?

    佛山地区最便宜的云主机通常来自头部云厂商的大促活动以及本地授权代理商的渠道折扣,结合新用户优惠和区域节点策略,入门级方案最低可控制在每年300元以内,佛山云主机哪个最便宜?市场参与者与定价策略佛山作为制造业重镇,企业数字化转型对云主机需求持续增长,你可能会发现,同一个配置在不同平台价格可以相差50%以上,这背后……

    2026年7月16日
    500
  • 大模型真的具备创造力吗?人工智能大模型创造力评估

    大模型并非拥有独立意识的“艺术家”,而是基于海量数据概率预测的“超级组合者”,其创造力本质是已有知识的重组与场景化迁移,很多人对AI的创造力存在误解,以为它像人类一样能凭空产生灵感,大模型没有主观情感,也不具备真正的自我意识,它通过计算下一个字出现的概率,将无数碎片化的信息进行逻辑拼接,这种能力在特定场景下表现……

    2026年6月20日
    2500
  • iOS开发如何配置云服务器,开发前需要哪些准备

    iOS开发云服务器配置,核心是选择一台运行macOS的云实例,并安装Xcode及开发工具链,对于大多数团队和个人开发者,优先考虑MacStadium或AWS Mac实例,确保CPU、内存和存储满足项目需求,同时配置好网络安全组和远程访问,为什么iOS开发需要云服务器很多开发者一开始觉得,iOS开发嘛,本地Mac……

    2026年8月12日
    900

发表回复

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

评论列表(1条)

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

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