1

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

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

我可以形成一些东西,比如 select * from table where rownum<5000 并且不存在(已经获取的记录)。但它不是有效的。

请建议形成查询的最佳方法或创建文件的任何替代方法。

4

2 回答 2

1

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

如果您使用的是早期版本,则可以使用 Tom Kyte 的技术实现 DIY 并行。The Hungry DBA在他的博客上提供了一个很好的解释

于 2013-01-03T18:39:50.647 回答
0

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

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

于 2013-01-03T15:45:44.450 回答