【问题标题】:Select random records in oracle [duplicate]在oracle中选择随机记录[重复]
【发布时间】:2012-05-22 17:38:42
【问题描述】:

可能重复:
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;

这很好用,只是它非常缓慢且昂贵。

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

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    你可以试试 SAMPLE 子句:

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

    但是:

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

    【讨论】:

    • 如果1%中没有field2='SAMPLE_VALUE'的记录怎么办?
    • 正如我所说,不能保证您会获得足够的值,特别是对于非常有选择性的查询。但是,如果 DBMS_Random 方法非常缓慢且昂贵,那么我希望这是因为有大量记录需要排序,因此在这种情况下找到一些记录的机会应该相当不错。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-10-05
        • 2012-12-11
        • 2011-08-11
        • 2011-04-08
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多