gpt4 book ai didi

Java MySQL 批量插入与正常

转载 作者:可可西里 更新时间:2023-11-01 08:29:53 25 4
gpt4 key购买 nike

我试图使插入到 mysql 的速度更快,所以我写了一个带有批量插入的代码。问题是,当我运行以下代码时,两种方法的结果相同(耗时:2 分钟或 173 秒)。欢迎就此事发表任何评论。

MySQLConn mysqlconn = new MySQLConn(db,username,pass);
Connection conn =mysqlconn.getConnection();
PreparedStatement ps = null;

String query = "insert into table (column) values (?)";

System.out.println("bulk insert started with "+10000 );
long startTime = System.currentTimeMillis();

try {
ps = conn.prepareStatement(query);
long start = System.currentTimeMillis();
for(int i =0; i<10000;i++){

ps.setString(1, "Name"+i);

ps.addBatch();

if(i%1000 == 0) ps.executeBatch();
}
ps.executeBatch();

System.out.println("Time Taken="+(System.currentTimeMillis()-start));

} catch (SQLException e) {
e.printStackTrace();
}

System.out.println("End inserting data...");

long stopTime = System.currentTimeMillis();
long elapsedTime = (stopTime - startTime);

long days = TimeUnit.MILLISECONDS.toDays(elapsedTime);
long hours = TimeUnit.MILLISECONDS.toHours(elapsedTime);
long minutes = TimeUnit.MILLISECONDS.toMinutes(elapsedTime);
long seconds = TimeUnit.MILLISECONDS.toSeconds(elapsedTime);


System.out.println("Time elapsed: "+minutes+"min, or "+seconds+"sec");



System.out.println("normal insert started with "+10000 );

long startTimeNormal = System.currentTimeMillis();

for(int i=0;i<10000;i++){
String ins="Data"+i;
Insert insert = new Insert(conn,ins,"db.table", "column" );
}
System.out.println("End inserting data...");

long stopTimeNormal = System.currentTimeMillis();
long elapsedTimeNormal = (stopTimeNormal - startTimeNormal);

long daysN = TimeUnit.MILLISECONDS.toDays(elapsedTime);
long hoursN = TimeUnit.MILLISECONDS.toHours(elapsedTime);
long minutesN = TimeUnit.MILLISECONDS.toMinutes(elapsedTime);
long secondsN = TimeUnit.MILLISECONDS.toSeconds(elapsedTime);


System.out.println("Time elapsed: "+minutesN+"min, or "+secondsN+"sec");

最佳答案

您使用 addBatchexecuteBatch,这很好,但您还需要将连接上的自动提交设置为 false 以实现更快的执行时间。

沿线的东西:

Connection conn = mysqlconn.getConnection();
conn.setAutoCommit(false); // here

PreparedStatement ps = null;

String query = "insert into table (column) values (?)";

System.out.println("bulk insert started with "+10000 );
long startTime = System.currentTimeMillis();

try {
ps = conn.prepareStatement(query);
long start = System.currentTimeMillis();
for(int i =0; i<10000;i++){

ps.setString(1, "Name"+i);

ps.addBatch();

if(i%1000 == 0) {
ps.executeBatch();
conn.commit(); // here
}
}
ps.executeBatch();
conn.commit(); // here

System.out.println("Time Taken="+(System.currentTimeMillis()-start));

} catch (SQLException e) {
e.printStackTrace();
}

关于Java MySQL 批量插入与正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29939558/

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