7

我需要从表中获取 1000 个随机行并为 Oracle 找到解决方案。但是,如果我在从包含大量行的表中检索数据时使用此查询,则最多需要 3 分钟才能完成:

SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum <= 1000

发生这种情况是因为选择了所有行,然后当我只需要 1000 时,所有行都按随机值排序。这种问题有什么解决方法吗?也许使用 dbms_random.value 以及一些会选择随机行的游标。

4

1 回答 1

10

我会这样做:

SELECT column 
FROM table sample (1)
where rownum <= 1000
--ORDER BY dbms_random.value 
 ;

将从表中获取 1% 的样本,在前 1000 个停止(如果需要,随机订购)。

有可能存在一种更好的方式来做你想要的。这就是我要尝试的。

于 2013-01-31T08:33:22.253 回答