我有一个表在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)
你必须在这里使用地板:
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;返回0行,因为隐式取整为最接近的int。