在oracle中选择随机记录

时间:2012-05-15 08:26:23

标签: sql oracle

  

可能重复:
  How to request a random row in SQL?

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

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

这很好用,除了它非常慢和昂贵。

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

3 个答案:

答案 0 :(得分:2)

您可以尝试SAMPLE子句:

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

然而:

  1. 您可能不会获得基于索引的访问
  2. 无法保证您获得足够的价值
  3. 您可能倾向于从表格的“开头”获取值。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您需要检查执行计划 它可能会对表格进行full access,因此如果您可以在field2上添加索引,则优化程序可能会根据您的index range scan执行where clause
(我真的不知道field2什么,所以仔细检查)