PostgreSQL选择20个随机记录。

19

如何在 SQL(PostgreSQL)查询中选择20个随机行?

1个回答

28
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 20

10
请注意,这非常非常慢,请勿在行数超过20,000的情况下进行操作。 - Johan
@Johan 我不确定自从发布这个问题以来是否进行了优化,但对20k+行进行的EXPLAIN显示,使用RANDOM()排序键和任何其他列作为排序键(例如rating)的成本相同。 - Chris Cirefice
@ChrisCirefice,如果“rating”列的基数较小(或未建立索引),则其成本将相同,因为只有在条件正确时才能使用索引。没有更多细节,我就只能说这些了。 - Johan
3
@Johan 好观点!我创建了一个[SQLFiddle](http://sqlfiddle.com/#!15/80065/6)来演示 ORDER BY 语句的一些性能差异。 结果表明,按主键排序最快,其次是按索引排序。然后,按任何未被索引的字段排序会显著增加成本。但是,ORDER BY RANDOM() 与按非索引列排序的速度差异不大(至少对于 250k 行)。不过,如果测试数百万行,则结果可能大不相同... 我没有测试那么多。 - Chris Cirefice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接