OFFSET
跳过指定行数,常用于分页。
简介
OFFSET 与 LIMIT 配合时,会先按 ORDER BY 确定稳定顺序,再跳过指定数量的结果行。没有唯一且稳定的排序键时,同一页可能在两次请求间出现重复或遗漏;偏移量很大时,数据库仍需定位并跳过前面的记录,深分页通常应改用游标条件。
基础语法
SELECT * FROM orders LIMIT 10 OFFSET 20;
示例
OFFSET 示例
示例跳过排序后的前 20 行再取 10 行;实际分页必须补充稳定 ORDER BY,不能依赖表的自然读取顺序。
示例数据表
表名:
orders| id | customer_id | product_id | name | department | amount | status | created_at | discount |
|---|---|---|---|---|---|---|---|---|
| 1 | 101 | 201 | Alice | Sales | 1200 | paid | 2026-01-03 | 0 |
| 2 | 102 | 202 | Bob | IT | 900 | pending | 2026-01-08 | 50 |
| 3 | 101 | 201 | Cindy | Sales | 1500 | paid | 2026-02-02 | 100 |
| 4 | 104 | 203 | David | HR | 700 | cancelled | 2026-02-15 | 0 |
运行结果
| id | customer_id | product_id | name | department | amount | status | created_at | discount |
|---|
常见问题
OFFSET 分页为什么必须配合稳定排序?
如果 ORDER BY 不能唯一确定顺序,同值记录可能在相邻页面重复或遗漏;应增加主键等唯一字段作为次级排序。
深分页为什么会越来越慢?
数据库通常仍要定位并跳过前面的记录;页码很深时可考虑用最后一条记录的排序键做游标分页。
翻页期间有新增或删除数据会怎样?
OFFSET 按位置取页,前面数据变化会让后续位置偏移;需要连续浏览的一致性时应评估游标分页或快照读取。
标签
这篇内容是否清楚?
感谢反馈,我们会把它用于后续内容复核。