mysql 怎么实现分页查询 limit 语法实战

mysql 怎么实现分页查询最基础方案就是使用 limit 子句,通过 limit 偏移量和每页条数两个参数,从查询结果里面截取指定区间的数据,这套写法是 MySQL 原生分页核心方式,适合后台管理列表数据展示,比如用户列表订单列表,很多新手会混淆页码偏移量计算逻辑,偏移量等于当前页码减一乘以每页记录数,当表数据量达到百万千万级别之后,普通 limit 深分页会出现性能下降,因为数据库需要扫描前面大量无用行,这个时候就要优化成子查询或者主键游标分页,编写分页 SQL 的时候一般会搭配 order by 排序,没有排序的分页结果不稳定,每次翻页可能出现重复或者丢失数据,写完之后还要配套查询总记录数的 count 语句,前端才能计算总页数,掌握基础 limit 写法再理解深分页优化,就可以完整掌握 mysql 怎么实现分页查询这套业务方案。

基础语法格式

select 字段列表 from 表名 where 条件 order by 排序字段 limit 偏移量 每页条数

参数说明

偏移量 也就是跳过前面多少行数据

每页条数 单页返回的数据总行数

举例子 每页 10 条,查询第 2 页,偏移量就是 (2-1)10=10,写法 limit 10 10

基础写法示例

查询用户表,每页 10 条,第 1 页

select id name from user order by id limit 0 10

查询用户表,每页 10 条,第 3 页

select id name from user order by id limit 20 10

配套总页数计算

分页页面必须统计总记录数,SQL 写法

select count () from user where 查询条件

总页数计算公式 总记录数除以每页条数,有余数向上取整

前端拿到总页数 当前页码 每页大小之后,就可以控制上一页下一页跳转。

基础 limit 分页优缺点表格

项目说明
优点语法简单 原生支持 开发成本低
缺点深分页性能差 大表扫描耗时长
适用场景中小数据量后台列表 几千到十万级数据
强制要求必须加 order by 保证分页稳定

深分页优化方案

普通 limit 当页码很大的时候,比如 limit 100000 10,MySQL 会扫描前 10 万行再丢弃,耗时明显上升,常用优化两种方式

第一种 子查询优化

select id name from user where id >= (select id from user order by id limit 100000 1) order by id limit 10

原理 先查出偏移位置的主键 id,再从这个 id 之后取数据,减少扫描行数

第二种 游标分页 也叫键集分页

适合无限滚动场景,记住上一页最后一条主键 id,下一页查询 where id > 上一页末尾 id order by id limit 10

优点 不受页码变大影响,性能稳定,缺点 不能直接跳转到指定页码,只适合连续翻页。

分页查询编写排查步骤

第一步 确认排序字段,优先使用主键 id 排序,主键有索引性能最好

第二步 计算偏移量,核对页码计算公式,避免页码和偏移量算错

第三步 检查 where 过滤条件,分页条件和 count 统计条件必须保持一致,不然总页数和实际数据对不上

第四步 大数据表测试执行计划 explain,确认是否命中索引,有没有全表扫描

第五步 如果深分页卡顿,切换子查询或者游标分页优化方案

其他注意事项

limit 不支持 offset 关键字的部分旧版本,新版 MySQL 也支持 limit 每页条数 offset 偏移量 这种写法,两种写法等价,业务里面不要混用造成维护混乱,同时如果排序字段存在相同值,会造成分页重复数据,所以排序最好使用唯一主键,避免同值排序不稳定。

【常见问题】

问题 1 mysql 怎么实现分页查询为什么一定要加 order by

回答 1 mysql 怎么实现分页查询的时候,如果不加 order by,数据库返回行顺序不固定,翻页的时候会出现数据重复或者漏掉,所以分页查询必须增加稳定排序,推荐主键 id 排序。

问题 2 mysql 怎么实现分页查询深分页为什么很慢

回答 2 mysql 怎么实现分页查询使用普通 limit 的时候,页码越大偏移量越高,数据库需要扫描前面大量不需要的数据行,所以深分页查询耗时变长,需要使用子查询或者游标分页优化。

问题 3 mysql 怎么实现分页查询总记录数 count () 很慢怎么办

回答 3 mysql 怎么实现分页查询大表 count () 耗时高,可以根据业务选择近似统计,或者使用覆盖索引,必要的时候单独维护统计表,不用每次实时 count 全表。

问题 4 mysql 怎么实现分页查询可以跳页吗

回答 4 mysql 怎么实现分页查询基础 limit 写法支持跳页,可以直接计算偏移量跳转到任意页码,游标键集分页只能连续翻页,不支持直接跳转到指定页码。

【免责申明】

本内容基于 MySQL 通用语法编写,不同版本执行优化策略存在差异,生产环境建议结合 explain 执行计划测试,本文仅作为学习参考,不替代 MySQL 官方手册。

本文来自作者[烟火小识堂]投稿,不代表万里行信息网立场,如若转载,请注明出处:https://www.wlx315.cn/shcs/202611/8065.html

赞 (7)

今日大家都在搜的词:

发表回复

本站作者后才能评论

评论列表(4条)

  • 烟火小识堂
    烟火小识堂 2026年11月09日

    我是万里行信息网的签约作者“烟火小识堂”!

  • 烟火小识堂
    烟火小识堂 2026年11月09日

    希望本篇文章《mysql 怎么实现分页查询 limit 语法实战》能对你有所帮助!

  • 烟火小识堂
    烟火小识堂 2026年11月09日

    本站[万里行信息网]内容主要涵盖:生活百科,小常识,生活小窍门,知识分享

  • 烟火小识堂
    烟火小识堂 2026年11月09日

    本文概览:mysql 怎么实现分页查询最基础方案就是使用 limit 子句,通过 limit 偏移量和每页条数两个参数,从查询结果里面截取指定区间的数据,这套写法是 MySQL 原生分页核心方式,适合后台管理列表数据展示,比如用户列表订单列表,很多新手会混淆页码偏移量计算逻辑,偏移量等于当前页码减一乘以每页记录数,当表数据量达到百万千万级别之后,普通 limit 深分页会出现性能下降,因为数据库需要扫描前面大量无用行,这个时候就要优化成子查询或者主键游标分页,编写分页 SQL 的时候一般会搭配 order by 排序,没有排序的分页结果不稳定,每次翻页可能出现重复或者丢失数据,写完之后还要配套查询总记录数的 count 语句,前端才能计算总页数,掌握基础 limit 写法再理解深分页优化,就可以完整掌握 mysql 怎么实现分页查询这套业务方案。

联系我们

联系:143 0457 151

工作时间:周一至周五,9:30-18:30,节假日休息

关注我们