游标分页vs传统分页
传统分页(页码分页)
这种是最常见的:
1 | LIMIT offset, size |
例如:
第1页 LIMIT 0,10
第2页 LIMIT 10,10
第3页 LIMIT 20,10
特点:
可以直接跳到 第 N 页
offset 会越来越大
深分页会非常慢 (会扫描大量数据)
例如:
LIMIT 9000000,10
数据库必须扫描 900 万行。
游标分页(Keyset Pagination)
例如:
1 | SELECT * |
特点:
- 不需要 offset
- 只依赖 上一页最后一条数据 (所以能上下页来翻页)
- 可以一直向后翻
例如:
第一页
id > 0
第二页
id > 10
第三页
id > 20
数据库可以:
直接从 B+Tree 定位到 id > last_id 的位置。