MySQL分页最常用LIMIT和OFFSET组合,OFFSET=(P-1)×N,LIMIT=N;深分页性能差,应避免大OFFSET,推荐游标分页、加索引和WHERE条件优化。

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) * NLIMIT = 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;










