对Oracle数据库使用ORDER BY dbms_random.value时的性能问题

时间:2013-01-31 08:17:57

标签: sql oracle performance cursor

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

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

这是因为所有行都被选中,然后当我只需要1000时,所有行都按随机值排序。这样的问题是否有解决办法?也许使用dbms_random.value以及一些将选择随机行的游标。

1 个答案:

答案 0 :(得分:10)

我会这样做:

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

将从表中获得1%的样本,首先停止1000(并且,如果需要,随机排序)。

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