gpt4 book ai didi

java - 检索百万条记录并将其插入表中

转载 作者:行者123 更新时间:2023-11-30 10:42:41 25 4
gpt4 key购买 nike

有列我想检索并插入到另一个表中例如,下面是我要检索值的第一个表

表 1
记录
1 ABC 新加坡
2 DEF 越南

我从 Table1 中检索上面的列值,然后插入到另一个表中,如下所示

表 2
ID 姓名 国家
1 ABC 新加坡
2 DEF 越南语

目前,我可以用 java 来做,我首先检索记录,然后拆分值并插入。但是,当 Table1 有数百万条记录要检索并将这百万条记录插入 Table2 时,我想通过批处理或分页来实现更好的性能。

任何指示我如何在我的案例中使用分页的指针都将不胜感激。

我正在使用 MSSQL 2008

最佳答案

如果您需要在代码中这样做(而不是在 SQL 中,即使有多个定界符也应该更容易),您可能想要使用的是具有适当批量大小的批量插入与您选择的良好获取大小:

    //Prepare statements first
try(PreparedStatement select = con.prepareStatement("SELECT * FROM SOURCE_TABLE");
PreparedStatement insert = con.prepareStatement("INSERT INTO TARGET_TABLE(col1, col2, col3) VALUES (?,?,?)")) {

//Define Parameters for SELECT
select.setFetchDirection(ResultSet.FETCH_FORWARD);
select.setFetchSize(10000);

int rowCnt = 0;

try(ResultSet rs = select.executeQuery()) {
while(rs.next()) {
String row = rs.getString(1);
String[] split = row.split(" |\\$|\\*"); //However you want to do that
//Todo: Error handling for array length

//Todo: Type-Conversions, if target data is not a string type
insert.setString(1, split[0]);
insert.setString(2, split[1]);
insert.setString(3, split[2]);
insert.addBatch();

//Submit insert in batches of a good size:
if(++rowCnt % 10000 == 0) {
int[] success = insert.executeBatch();
//Todo: Check if that worked.
}
}
//Handle remaining inserts
int[] success = insert.executeBatch();
//Todo: Check if that worked.
}

} catch(SQLException e) {
//Handle your Exceptions
}

在计算“良好”的获取和批量大小时,您需要考虑一些参数:

  • Fetchsize 会影响客户端的内存消耗。如果你有足够多的东西,你可以把它做大。

  • 提交数百万行的插入需要一些时间。根据您的要求,您可能希望每隔一段时间(每 250.000 次插入?)提交一次插入事务。

  • 考虑您的事务隔离:确保关闭自动提交,因为提交每个插入将使大部分批处理 yield 消失。

关于java - 检索百万条记录并将其插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38007500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com