MySQL分页最常用LIMIT和OFFSET组合,OFFSET=(P-1)×N,LIMIT=N;深分页性能差,应避免大OFFSET,推荐游标分页、加索引和WHERE条件优化。
MySQL 中实现分页查询最常用的方式就是 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 = NOFFSET = 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 值由前端传入或后端计算得出,务必校验非负整数。