我在 postgres 中有一个表,其中包含几百万行。我在网上查了一下,发现如下
SELECT myid FROM mytable ORDER BY RANDOM() LIMIT 1;
它有效,但它真的很慢......是否有另一种方法来进行该查询,或者直接选择随机行而不读取所有表的方法?顺便说一下,'myid' 是一个整数,但它可以是一个空字段。
最佳答案
您可能想尝试使用 OFFSET
,如
SELECT myid FROM mytable OFFSET floor(random() * N) LIMIT 1;
N
是 mytable
中的行数.您可能需要先做一个 SELECT COUNT(*)
计算出 N
的值.
更新(作者:Antony Hatchkins)
您必须使用 floor
这里:
SELECT myid FROM mytable OFFSET floor(random() * N) LIMIT 1;
考虑一个包含 2 行的表格; random()*N
生成 0 <= x < 2
例如 SELECT myid FROM mytable OFFSET 1.7 LIMIT 1;
由于隐式舍入到最接近的 int,因此返回 0 行。
关于postgresql - Postgres 中的快速随机行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297396/