如何在 postgresql 中对 UUID 进行 keypaginate?
How to keypaginate UUID in postgresql?
我想以最佳方式为具有 10k+ 个寄存器的用户 table 分页。我可以使用 offset 和 limit,但正如我在许多文章中看到的那样,它显然不好。偶然发现了键集和光标分页,我认为该键集可能更适合,因为它更容易在 API 中实现(我使用的是 golang)。问题是键集是如何工作的,据我所知,id(主键)被索引,然后用于跨数据库查询:
select * from users where id > ? order by id limit ?
但是,这似乎只适用于整数自动增量 ID,而我的情况并非如此,我使用的是 UUID (v4)。
如何实现此键集分页?
这与 UUID 一样有效。假设id
是UUID主键列,可以这样写
SELECT ... FROM ...
WHERE (order_col1, order_col2, id) > (<previous values>)
ORDER BY order_col1, order_col2, id
LIMIT <page size>;
此查询可由 (order_col1, order_col2)
上的索引支持。
我想以最佳方式为具有 10k+ 个寄存器的用户 table 分页。我可以使用 offset 和 limit,但正如我在许多文章中看到的那样,它显然不好。偶然发现了键集和光标分页,我认为该键集可能更适合,因为它更容易在 API 中实现(我使用的是 golang)。问题是键集是如何工作的,据我所知,id(主键)被索引,然后用于跨数据库查询:
select * from users where id > ? order by id limit ?
但是,这似乎只适用于整数自动增量 ID,而我的情况并非如此,我使用的是 UUID (v4)。 如何实现此键集分页?
这与 UUID 一样有效。假设id
是UUID主键列,可以这样写
SELECT ... FROM ...
WHERE (order_col1, order_col2, id) > (<previous values>)
ORDER BY order_col1, order_col2, id
LIMIT <page size>;
此查询可由 (order_col1, order_col2)
上的索引支持。