这个问题回答了如何从oracle中选择随机样本的问题,这正是我所需要的.但我不明白该解决方案之间的区别
SELECT *
FROM (
SELECT *
FROM mytable
ORDER BY
dbms_random.value
)
WHERE rownum <= 1000
Run Code Online (Sandbox Code Playgroud)
和类似的东西
select * from mytable where rownum<=1000 order by dbms_random.value
Run Code Online (Sandbox Code Playgroud)
当我使用第一种方法查询时,它需要很长时间(仍然没有完成)但是当我使用第二种方法查询时,它非常快,但结果似乎不是随机的.
感谢和建议/方向,你们都可以提供.
谢谢!
JC
在进行任何排序之前, Oracle会根据条件选择行.因此,您的第二个查询可以读作:
mytable因此,您将始终以随机顺序获得相同的1000行.第一个查询强制Oracle 首先随机对所有行进行排序: