2

可能重复:
如何在 SQL 中请求随机行?

您好我正在尝试从 oracle 数据库中选择随机记录。我尝试使用以下查询:

select field1 
from (select field1 from table1 where field2='SAMPLE_VALUE' order by dbms_random.value) 
where rownum <2;

这工作得很好,除了它非常缓慢和昂贵。

我们有更快的方法来实现这一目标吗?

4

3 回答 3

2

您可以尝试 SAMPLE 子句:

select field1
from   table1 sample (1)
where  field2='SAMPLE_VALUE' and
       rownum <=1

然而:

  1. 您可能不会获得基于索引的访问
  2. 不能保证你会得到足够的价值
  3. 您可能倾向于从表格的“开头”获取值。
于 2012-05-15T08:57:46.467 回答
0

您需要检查执行计划。
它可能正在full access对表进行操作,因此如果您可以在其上添加索引,field2那么优化器可能值得index range scan根据您的where clause.
(我对 field2 真的一无所知,所以请仔细检查)

于 2012-05-15T09:01:43.607 回答
0

如果记录有一些唯一的数字列,我会尝试将它与随机生成的值进行比较。类似的东西SELECT ... FROM ... WHERE id = RANDOM_VALUE。但是可能需要一些计算才能使这个唯一列和随机值具有相同的范围。

于 2012-05-15T08:51:44.740 回答