可能重复:
如何在 SQL 中请求随机行?
您好我正在尝试从 oracle 数据库中选择随机记录。我尝试使用以下查询:
select field1
from (select field1 from table1 where field2='SAMPLE_VALUE' order by dbms_random.value)
where rownum <2;
这工作得很好,除了它非常缓慢和昂贵。
我们有更快的方法来实现这一目标吗?
可能重复:
如何在 SQL 中请求随机行?
您好我正在尝试从 oracle 数据库中选择随机记录。我尝试使用以下查询:
select field1
from (select field1 from table1 where field2='SAMPLE_VALUE' order by dbms_random.value)
where rownum <2;
这工作得很好,除了它非常缓慢和昂贵。
我们有更快的方法来实现这一目标吗?
您可以尝试 SAMPLE 子句:
select field1
from table1 sample (1)
where field2='SAMPLE_VALUE' and
rownum <=1
然而:
您需要检查执行计划。
它可能正在full access
对表进行操作,因此如果您可以在其上添加索引,field2
那么优化器可能值得index range scan
根据您的where clause
.
(我对 field2 真的一无所知,所以请仔细检查)
如果记录有一些唯一的数字列,我会尝试将它与随机生成的值进行比较。类似的东西SELECT ... FROM ... WHERE id = RANDOM_VALUE
。但是可能需要一些计算才能使这个唯一列和随机值具有相同的范围。