对于大型数据集,使用 an 进行分页OFFSET
是众所周知的,并且不是最好的分页方式。更好的分页方式是使用游标,它只是行上的一个唯一标识符,因此我们知道从最后一个光标位置上次离开的位置继续分页的位置。
当涉及到一个自动递增id
值的游标时,实现起来相当容易:
SELECT * FROM users
WHERE id <= %cursor // cursor is the auto incrementing id, ex. 100000
ORDER BY id DESC
LIMIT %limit
Run Code Online (Sandbox Code Playgroud)
我们不确定的是,如果不是自动递增id
游标,游标的唯一唯一顺序标识符是表行上的uuid
和created_at
。
我们当然可以根据 查询uuid
得到created_at
,然后选择所有的users
,<= created_at
但问题是如果表中有多个相同created_at
时间戳的实例users
怎么办?知道如何users
根据uuid/created_at
游标组合查询表以确保我们获得正确的数据集(就像我们使用自动递增一样id
)?再次,只有独特的领域是uuid
因为created_at
可能是重复的,但他们的组合是每行唯一的。