gpt4 book ai didi

java - 让 ExecuteBatch 执行得更快

转载 作者:搜寻专家 更新时间:2023-11-01 01:04:11 25 4
gpt4 key购买 nike

我试图从 sybase 服务器读取一个表,处理行,并将结果输出到另一个表。 (下面是我的代码)

该代码检索表的速度非常快,处理速度也同样快(到达它在 30 秒内发送的部分)。但是当我运行 execute batch 时,它会在完成前等待 20 分钟(仅供引用,我有一个正在测试 8400 行的表)。

有没有更有效的方法来做到这一点?我很乐意接受或发送查询(我可以创建一个新表、更新一个表等)——我只是不知道为什么这么慢(我确定数据 < 1 MB,我确信 SQL Server 不需要 20 分钟来解析 8400 行)。有什么想法吗?

注意:这对我来说真的很糟糕的原因是我必须解析一个有 1.2 MM 行的表(我现在正在使用的这个表是一个有 8400 行的测试表)

    Connection conn = DriverManager.getConnection(conString, user, pass);


String sql = "SELECT id,dateid,attr from user.fromtable";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);

String sqlOut = "INSERT INTO user.mytabletest (id,attr,date,estEndtime) values (?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sqlOut);

int i=1;

while(rs.next())
{
int date = rs.getInt("dateid");
String attr = rs.getString("attr");
String id = rs.getString("id");

Time tt = getTime(date,attr);
Timestamp ts = new Timestamp(tt.getTime());

ps.setString(1, id);
ps.setString(2, attr);
ps.setInt(3, date);
ps.setTimestamp(4, ts);
ps.addBatch();

if(i % 10000 == 0)
{
System.out.println(i);
ps.executeBatch();
conn.commit();
ps.clearBatch();
}

i++;
}
System.out.println("sending "+(new Date()));
int[] results = ps.executeBatch();
System.out.println("committing "+(new Date()));
conn.commit();
System.out.println("done "+(new Date()));

最佳答案

要有效地使用批处理,您应该关闭 AutoCommit 选项并在执行批处理后将其打开(或者使用 connection.commit() 方法)

connection.setAutoCommit(false);
while(rs.next())
{
.....
ps.addBatch();
}
int[] results = ps.executeBatch();
connection.setAutoCommit(true);

关于java - 让 ExecuteBatch 执行得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9319366/

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