对比
对比
-- 深分页:OFFSET 100000 需要先跳过 10 万行
SELECT id, title, created_at
FROM posts
ORDER BY created_at DESC, id DESC
LIMIT 20 OFFSET 100000;
-- keyset:从上一页末条的 (created_at, id) 继续
SELECT id, title, created_at
FROM posts
WHERE (created_at, id) < ('2024-06-01 12:00:00', 88888)
ORDER BY created_at DESC, id DESC
LIMIT 20;
-- MySQL 与 PostgreSQL 都支持 (a,b) < (c,d) 行构造器比较| 前提 | 排序列与游标列要能唯一确定顺序(非唯一列追加主键) |
|---|---|
| 翻页方式 | 只适合顺序翻页;跳页需要额外的键映射或首末页方案 |
| 索引 | (created_at, id) 复合索引让下一页定位变成一次范围查找 |