从大表的子集中对随机行进行最快查询 - postgresql
Posted
技术标签:
【中文标题】从大表的子集中对随机行进行最快查询 - postgresql【英文标题】:Fastest query for random row from subset of large table - postgresql 【发布时间】:2015-09-12 20:14:07 【问题描述】:我正在使用 Rails 和 Postgresql。我有一个非常大的表,其中包含一个名为 status 的列。从这个状态列中,很多行的值为 1。我想根据状态列中值为 1 的所有行选择一个随机行。每行也有一个 id,它们是连续的。
获取此随机行的最快方法是什么?
【问题讨论】:
我建议您也检查一下***.com/questions/8674718/…,以便很好地讨论如何有效地执行此查询 【参考方案1】:尝试使用ActiveRecord解决方案,例如:
Model_name.where(status: 1).limit(1).order("RANDOM()")
或者:
Model_name.where(status: 1).order("RANDOM()").first
希望这会有所帮助。
【讨论】:
如果我只需要 1 行,为什么限制为 5?是不是打错字了? 您可以使用.first
。
所以它只是使子集的顺序随机并选择第一个?不需要遍历所有记录吧?
如何更改第二行以选择 status = 1 的子集,第二列可以说 apples 不等于 5?【参考方案2】:
你可以玩OFFSET
选项
SELECT * FROM users WHERE status = 1 OFFSET random()*I LIMIT 1;
I 是表中的行数。
【讨论】:
表中不断变化的行数是多少? 你的意思可能是LIMIT 1
你可以写offset random() * (select count(*) from users)
以上是关于从大表的子集中对随机行进行最快查询 - postgresql的主要内容,如果未能解决你的问题,请参考以下文章