查询从大型数据表批量获取数据

时间:2013-01-03 15:40:57

标签: java sql oracle performance

我需要从一个巨大的数据表(可能包含5百万条记录)创建一些具有我自己的格式的文件(比如每个5000个rec)。我希望这个创作是多线程的。

那么如何有效地形成查询以获取1..5000和5001..10000等记录。

我可以在rownum< 5000并且不存在(已经获取的记录)的表中形成一些像select *的东西。但它不是有效的。

请建议形成查询的最佳方式或创建文件的其他方法。

2 个答案:

答案 0 :(得分:1)

如果您使用的是Oracle 11g,则可以使用DBMS_PARALLEL_EXECUTE包在多个线程中运行您的过程。 Find out more

如果您使用的是早期版本,则可以使用Tom Kyte的技术实现DIY并行性。 Hungry DBA提供a good explanation on his blog here

答案 1 :(得分:0)

听起来你需要使用MySql LIMIT子句来实现分页的一组查询(例如,查询将获得前1000个,另一个获得第二个1000等。)。

您可以形成这些查询并以Callables提交给具有一定数量线程的Executor serviceExecutor将管理线程。我怀疑在每个Callable内查询和写入记录可能更有效,但这是一个可能需要测试的假设。