首页/数据/数据库速查/LIMIT 分页与 OFFSET 深翻页问题
本包目录(495 条)
MySQL 基础与连接36 条
SQL 语法52 条
用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条Redis 运维与场景124 条

LIMIT 分页与 OFFSET 深翻页问题

限制返回行数并支持偏移;大偏移(LIMIT 1000000, 20)会扫描大量行,应改用基于游标的键集分页。

数据库速查数据更新于 2026-10-12
用途限制结果集与分页
语法LIMIT [offset,] count 或 LIMIT count OFFSET offset
优化键集分页 / 延迟关联

基础分页

基础分页
SELECT id, sku FROM orders ORDER BY id LIMIT 20;       -- 第1页
SELECT id, sku FROM orders ORDER BY id LIMIT 20 OFFSET 20; -- 第2页

深翻页优化

深翻页优化
-- 键集分页:记住上一页最后的 id
SELECT id, sku FROM orders WHERE id > 100020 ORDER BY id LIMIT 20;
-- 延迟关联:先在索引上取 id 再回表
SELECT o.* FROM orders o
JOIN (SELECT id FROM orders ORDER BY id LIMIT 1000000, 20) t USING(id);
OFFSET 越大越慢:MySQL 仍需读取并丢弃前 N 行,翻到百万级页面应改用游标或延迟关联。

易错点

  • 没有 ORDER BY 的 LIMIT 结果顺序不可预期
  • LIMIT 大偏移与 ORDER BY 无索引叠加时最慢,两者要一起优化

数据来源与参考

  • MySQL 8.0 Reference Manual: LIMIT Query Optimization

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌