我正在使用PHP操作PostgreSQL。
是否可能从条件为 WHERE condition 的 table 列中选择特定数量的随机值,而不是使用以下语句: select column FROM table WHERE condition 然后将它们转换为数组并使用
(我不想这样做,因为我将有数百万行数据,先选择所有值再使用
假设我有一个像这样的表:
是否可能从条件为 WHERE condition 的 table 列中选择特定数量的随机值,而不是使用以下语句: select column FROM table WHERE condition 然后将它们转换为数组并使用
array_rand()
?(我不想这样做,因为我将有数百万行数据,先选择所有值再使用
array_rand()
可能需要很长时间。)假设我有一个像这样的表:
name | items
-----------+------------
Ben | {dd,ab,aa}
-----------+------------
David | {dd,aa}
-----------+------------
Bryan | {aa,ab,cd}
-----------+------------
Glen | {cd}
-----------+------------
Edward | {aa,cd}
-----------+------------
Aaron | {dd,aa}
-----------+------------
..... (many many more)
更新:
我需要在一列中选择符合条件的10个随机值(或者说是10个随机行),条件为@> ARRAY[aa]
,但是不能使用顺序表扫描或其他耗费时间的方法。
order by random()
会花费很长时间,因为它必须处理每一行,所以我将采用更好的解决方案。
random()
函数必须对 每一行 进行评估,然后 所有 行必须在返回前进行排序。这是一个性能噩梦!如果您披露有关您的情况的更多信息,我可能能够提供一个更快的解决方案。我最近在这里发布了一个解决方案。 - Erwin Brandstetter