mysql查询结果如何限制显示范围_使用limit offset实现分页

张开发
2026/4/18 11:09:46 15 分钟阅读

分享文章

mysql查询结果如何限制显示范围_使用limit offset实现分页
最安全写法是LIMIT 10 OFFSET 20OFFSET必须在LIMIT后错误顺序或旧式写法会报ERROR 1064大OFFSET性能差因需扫描丢弃前N行务必配合ORDER BY确定排序推荐游标分页优化。MySQL LIMIT 和 OFFSET 怎么写才不出错直接写 LIMIT 10 OFFSET 20 是最安全的写法顺序不能反——OFFSET 必须在 LIMIT 后面否则报错 ERROR 1064。MySQL 不支持 LIMIT OFFSET 20, 10 这种旧式写法那是 PostgreSQL 的风格也不接受 LIMIT 20, 10 里把偏移量放前面虽然语法上允许但语义易混淆强烈不建议。常见错误现象查第 2 页每页 10 条却漏掉第 11 条或返回空结果——往往是因为 OFFSET 算错了比如用页码 × 每页条数但没减 1应是 (page - 1) * size。LIMIT 10 OFFSET 0第 1 页LIMIT 10 OFFSET 10第 2 页跳过前 10 条别写 LIMIT OFFSET 10 10会语法报错大偏移量OFFSET 很大时为什么慢因为 MySQL 仍要扫描并丢弃前 OFFSET 行哪怕你只要最后 10 条。例如 LIMIT 10 OFFSET 1000000它得先定位到第 1000001 行中间所有行都参与索引遍历或全表扫描。使用场景后台管理列表页翻到 500 页之后响应明显变卡监控发现 EXPLAIN 显示 rows 值巨大且 Extra 里有 Using filesort 或 Using temporary。优化方向改用「游标分页」基于上一页最后一条的主键值如 WHERE id 12345 LIMIT 10避免 ORDER BY RAND() LIMIT这会导致全表随机排序再截断极慢复合索引要覆盖 ORDER BY 字段 WHERE 条件否则 OFFSET 效率雪上加霜和 ORDER BY 一起用时必须注意什么没 ORDER BY 的 LIMIT 结果不可靠——MySQL 不保证返回哪几行尤其表有并发写入时两次查询同个 LIMIT 可能拿到不同数据。 VWO 一个A/B测试工具

更多文章