适用场景/背景描述
- 如果需要做分页查询
- 且被查询的数据量很大,直接 limit offset 有可能会导致全表扫描或扫描前 n 项
- 如果你用查询的字段不包含索引字段,那么会发生全表扫描
- 如果你查询的字段包括索引字段,你仍然要扫描索引字段的前 n 项
- 且客户端侧仅支持每次到下一页的查找,不支持跳转查找第几页
- 且 order by 排序是以索引来排序
如果你遇到的是上方描述的场景,那么分页游标就是你很好的选择!
本质原理
一句话:原本的常规的分页查找,思路转变成利用索引条件和 limit 查找多少个数量来替代,来避免 offset 的性能瓶颈
简单举例子
如果你使用 limit offset:
比如你要一页一页的分页查找用户表数据,按照每页 10 条来查找,你查找第一页,能很快找到,因为 id 为主键索引,依据 B+ 树的二分查找特性
select * from t_user order by id limit 10;
…你一页一页的查找,然后你查找后头第 4 页,取 10