Java 从大型数据表中批量获取数据的查询
我需要从一个巨大的数据表(可能包含500万条记录)中创建一些具有我自己格式的文件(比如每个5000条记录)。我希望这个创建是多线程的 因此,如何高效地形成查询以获取1..5000和5001..10000等记录Java 从大型数据表中批量获取数据的查询,java,sql,oracle,performance,Java,Sql,Oracle,Performance,我需要从一个巨大的数据表(可能包含500万条记录)中创建一些具有我自己格式的文件(比如每个5000条记录)。我希望这个创建是多线程的 因此,如何高效地形成查询以获取1..5000和5001..10000等记录 我可以从表中生成select*from,其中rownum听起来像是需要一组使用MySqlLIMIT子句的查询来实现分页(例如,一个查询将获得第一个1000,另一个查询将获得第二个1000等等) 您可以形成这些查询,并将其作为Callables提交给具有一定数量线程的。执行器将管理线程。我怀
我可以从表中生成select*from,其中rownum听起来像是需要一组使用MySql
LIMIT
子句的查询来实现分页(例如,一个查询将获得第一个1000,另一个查询将获得第二个1000等等)
您可以形成这些查询,并将其作为
Callables
提交给具有一定数量线程的。执行器将管理线程。我怀疑在每个可调用的中查询和写入记录可能更有效,但这是一个可能需要测试的假设。听起来您需要一组使用MySqlLIMIT
子句的查询来实现分页(例如,一个查询将得到第一个1000,另一个查询将得到第二个1000等等)
您可以形成这些查询,并将其作为Callables
提交给具有一定数量线程的。执行器将管理线程。我怀疑在每个Callable
中查询和写入记录可能更有效,但这是一个可能需要测试的假设。如果您使用的是Oracle 11g您可以使用DBMS_PARALLEL_EXECUTE包在多个线程中运行您的过程
如果您使用的是早期版本,则可以使用Tom Kyte提供的技术实现DIY并行。饥饿的DBA提供。如果您使用的是Oracle 11g,则可以使用DBMS\u PARALLEL\u EXECUTE包在多个线程中运行您的过程
如果您使用的是早期版本,您可以使用Tom Kyte提供的技术实现DIY并行。饥渴的DBA提供了。请检查:每个文件是否必须具有相同的行数?如果这不重要,您可以将表划分为ROWID范围,然后每个线程将只使用类似于的东西,在和B
。你是说要创建1000个文件吗?你需要将所有行写入文件吗?是的,我正在寻找相同的@davidridge。如何确定哪个记录指向哪个文件?请检查:每个文件必须具有相同的行数吗?如果这不重要,你可以将表划分为ROWID范围,然后每个行read只会使用类似于的东西,其中A和B之间的rowid
。您正在谈论创建1000个文件吗?您需要将所有行写入文件吗?是的,我正在寻找相同的@davidardridge。您如何决定哪条记录进入哪一个文件?