gpt4 book ai didi

java - 插入性能调整

转载 作者:行者123 更新时间:2023-11-29 04:44:59 25 4
gpt4 key购买 nike

目前我们正在从一个数据库中选择数据并将其插入到备份数据库(SQL SERVER)中。

此数据在一次选择中始终包含超过 15K 条记录。 我们正在使用 Enumeration 迭代所选数据。

我们正在使用 JDBC PreparedStatement 插入数据:

    Enumeration values = ht.elements(); -- ht is HashTable containing selected data.
while(values.hasMoreElements())
{
pstmt = conn.prepareStatement("insert query");
pstmt.executeUpdate();
}

我不确定这是进行更快插入的正确或有效方法。

插入 10k 行大约需要 30 分钟或更长时间。有什么有效的方法可以让它变快吗?
注意:不在表上使用任何索引。

最佳答案

使用批量插入,但在几次输入后提交,不要尝试一次发送所有 10K。尝试调查以获得最佳大小,这是内存与网络旅行之间的权衡。

Connection connection = new getConnection();
Statement statement = connection.createStatement();
int i = 0;

for (String query : queries) {
statement.addBatch("insert query");
if ((i++ % 500) == 0) {
// Do an execute now and again, don't send too many at once
statement.executeBatch();
}
}

statement.executeBatch();
statement.close();
connection.close();

此外,根据您的代码我不确定您在做什么,但使用参数化查询而不是将 10K 插入语句作为文本发送。像这样的东西:

String q= "INSERT INTO data_table (id) values (?)";
Connection connection = new getConnection();
PreparedStatement ps = connection.prepareStatement(q);

for (Data d: data) {
ps.setString(1, d.getId());
ps.addBatch();
}

ps.executeBatch();
ps.close();
connection.close();

关于java - 插入性能调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37546098/

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