分页查询怎么做?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
python种子怎么设置?python随机数种子用法
下一篇 2026年7月12日 01:48

相关推荐

  • 负数算术右移结果为何是负数?负数算术右移规则详解

    负数算术右移的核心规则是高位补1,这与正数补0的逻辑截然相反,旨在保持数值的符号位不变,从而实现除以2的整数幂运算,在计算机底层逻辑中,整数通常以补码形式存储,对于正数而言,算术右移(Arithmetic Right Shift)和逻辑右移(Logical Right Shift)的效果是一致的,因为最高位(符……

    2026年7月1日
    2300
  • 服务器光纤口是什么?服务器光纤口和电口区别

    服务器的“光纤口”通常指的是光纤网卡(Fibre Channel HBA/FC NIC)或光模块接口(SFP/SFP+/QSFP等),具体取决于应用场景,以下是关于服务器光纤口的详细解析:光纤口的主要类型(1)Fibre Channel(FC)光纤口用途:主要用于连接存储区域网络(SAN),如磁盘阵列(SAN……

    2026年7月10日
    12600
  • IB驱动到底怎么安装?,IB驱动有什么用

    安装IB驱动通常被视为可选步骤,但在高性能计算、存储网络等场景下,正确安装并匹配驱动版本直接影响网络性能和稳定性,是必须完成的关键配置,为什么说IB驱动安装是可选步骤许多朋友第一次接触InfiniBand(IB)网络时,都会问:这个驱动一定要装吗?从严格意义上讲,对于普通以太网用户,IB驱动确实可有可无,但当你……

    2026年8月18日
    1100
  • 大模型全参数微调显存需求测算

    大模型全参数微调的显存需求主要取决于模型参数量、批次大小(Batch Size)以及使用的优化技术,通常每10亿参数需要约20GB-40GB显存,具体数值需结合训练精度和硬件配置综合测算,在2026年的算力环境下,许多开发者仍对全参数微调(Full Fine-Tuning, FFT)的硬件门槛感到困惑,很多人误……

    2026年6月17日
    2600
  • 大模型的对数似然Log Likelihood是什么?大模型训练损失下降慢怎么办

    大模型的对数似然(Log Likelihood)是衡量模型预测概率分布与真实数据分布之间差异的核心指标,数值越高代表模型对数据的拟合度越好,即模型越“确信”其生成的答案是正确的,在理解大语言模型(LLM)时,我们常听到“损失函数”或“准确率”这些词,但对数似然才是模型在训练底层真正优化的目标,它回答了这样一个问……

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

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

    2026年8月21日
    400
  • 服务器DDOS监控怎么做?,有哪些工具?

    服务器ddos监控不是买一个工具就完事,而是要结合业务场景选择实时检测与自动清洗方案,否则攻击来了你可能毫无察觉,业务中断几分钟损失就难以挽回,服务器ddos监控平台怎么选选平台之前,先想清楚自己的业务对延迟和攻击规模的容忍度,电商大促时流量暴涨,游戏开服时容易成为靶子,金融交易要求毫秒级响应,这些场景对监控的……

    2026年7月27日
    400
  • 分布式数据存储的最佳方案在哪里,有哪些推荐?

    分布式数据存储在哪里?核心答案是:数据被分散存放在多个独立物理节点上,这些节点通过软件定义组成统一存储池,节点可以分布在同一机柜、不同楼层甚至跨数据中心,你问“数据到底存在哪台机器上”,其实没有固定答案——分布式存储的精髓就是让数据在多个位置间动态分布,既保证高可用,又隐藏了具体路径,分布式存储数据放在哪里:节……

    2026年7月27日
    900
  • IDC牌照和列表如何查询?,办理流程是什么?

    IDC牌照查询是验证企业是否具备合法开展互联网数据中心业务资质的核心手段,而调用“查询IDC列表-ListIDcs”接口则是获取该资质信息的高效技术路径,可直接对接工信部官方数据,实现对企业资质、许可证编号及业务范围的实时核验,IDC牌照是什么?为什么查询对企业至关重要IDC牌照,全称为互联网数据中心业务经营许……

    2026年8月4日
    600
  • IP信誉库文件信誉特征库升级报错怎么办,原因有哪些

    IP信誉库和文件信誉特征库升级报错,绝大多数情况下由网络波动、证书验证失败、本地磁盘空间不足或服务进程冲突引起,按照系统化排查步骤即可定位并恢复,无需重装或联系厂商,IP信誉库升级失败原因分析网络连接不稳定安全设备在更新IP信誉库时,需要持续从厂商更新服务器下载增量数据,如果网络出现丢包、延迟过高或DNS解析异……

    2026年8月19日
    300

发表回复

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

评论列表(1条)

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

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