我正在使用PHP进行PostgreSQL.
是否可以在列FROM 表 WHERE 条件中选择特定数量的随机值
代替
选择列 FROM 表 WHERE 条件
然后将它们转换为数组并使用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)
Run Code Online (Sandbox Code Playgroud)
我需要在一个列(或基本上是10个随机行)中选择匹配条件(在这种情况下是@> ARRAY[aa])的10个随机值,而不进行顺序表扫描或耗时的事情.
order by random() 因为它必须处理每一行所以需要花费很多时间,所以我会选择更好的解决方案.
小智 5
在PostgreSQL中,你可以order by random(),所以这应该是你想要的:
select name
from table
where items @>ARRAY['aa']
order by random()
limit 10;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |