我有一个超过1000万行的巨大表.我需要从中有效地获取5000的随机抽样.我有一些行为者减少了我想要的总行数,如9毫米.
我尝试使用NEWID()的命令,但该查询将花费太长时间,因为它必须对所有行进行表扫描.
有更快的方法吗?
这个问题回答了如何从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