MySQL 中实现分页查询最常用的方式就是
LIMIT和
OFFSET组合,语法简单但需注意性能和边界问题。
基本语法:LIMIT + OFFSET
LIMIT指定返回记录数,
OFFSET指定跳过多少条记录。常见写法:
SELECT * FROM table_name LIMIT 10 OFFSET 20:跳过前 20 条,取接下来的 10 条(即第 21–30 条) 等价简写:
SELECT * FROM table_name LIMIT 20, 10(MySQL 支持,但可读性略差,不推荐用于复杂逻辑)
分页参数如何计算
假设每页显示 N 条,当前是第 P 页(从 1 开始计数),则:
OFFSET = (P - 1) * N
LIMIT = N例如:第 5 页,每页 15 条 →
OFFSET = 4 * 15 = 60,
LIMIT = 15
性能注意事项
当
OFFSET很大时(如几万、几十万),MySQL 仍需扫描并跳过前面所有记录,导致慢查询: 避免
LIMIT 1000000, 20这类深分页;可改用“游标分页”(基于上一页最后一条的主键或时间戳继续查) 确保
ORDER BY字段有索引(尤其是配合分页的排序字段),否则排序成本高且无法利用索引加速偏移 加
WHERE条件缩小数据集后再分页,比全表分页高效得多
实际分页示例(带排序和条件)
查用户表中状态为 1 的用户,按注册时间倒序,第 3 页(每页 10 条):
SELECT id, name, created_at FROM users WHERE status = 1 ORDER BY created_at DESC LIMIT 10 OFFSET 20;
注意:
ORDER BY必须存在,否则分页结果不稳定;
OFFSET值由前端传入或后端计算得出,务必校验非负整数。
