我需要从一个巨大的数据表(可能包含5百万条记录)创建一些具有我自己的格式的文件(比如每个5000个rec)。我希望这个创作是多线程的。
那么如何有效地形成查询以获取1..5000和5001..10000等记录。
我可以在rownum< 5000并且不存在(已经获取的记录)的表中形成一些像select *的东西。但它不是有效的。
请建议形成查询的最佳方式或创建文件的其他方法。
答案 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 service。 Executor
将管理线程。我怀疑在每个Callable
内查询和写入记录可能更有效,但这是一个可能需要测试的假设。