java 下执行mysql 批量插入的几种方法及用时
2013-04-17 12:06
911 查看
方法1:
Java code
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
pstmt = conn
.prepareStatement("insert into loadtest (id, data) values (?, ?)");
for (int i = 1; i <= COUNT; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DATA);
pstmt.execute();
}
MyISAM:246.6秒、InnoDB:360.2秒
方法2: 使用事务,不自动commit
Java code
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt = conn
.prepareStatement("insert into loadtest (id, data) values (?, ?)");
for (int i = 1; i <= COUNT; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DATA);
pstmt.execute();
if (i % COMMIT_SIZE == 0) {
conn.commit();
}
}
conn.commit();
InnoDB:31.5秒
方法3: executeBatch
Java code
conn = DriverManager.getConnection(JDBC_URL
+ "?rewriteBatchedStatements=true", JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt = conn
.prepareStatement("insert into loadtest (id, data) values (?, ?)");
for (int i = 1; i <= COUNT; i += BATCH_SIZE) {
pstmt.clearBatch();
for (int j = 0; j < BATCH_SIZE; j++) {
pstmt.setInt(1, i + j);
pstmt.setString(2, DATA);
pstmt.addBatch();
}
pstmt.executeBatch();
if ((i + BATCH_SIZE - 1) % COMMIT_SIZE == 0) {
conn.commit();
}
}
conn.commit();
InnoDB:5.2秒
上面的使用时必须
1)rewriteBatchedStatements=true
2)useServerPrepStmts=true
方法4:先LOAD再COMMIT
Java code
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt = conn.prepareStatement("load data local infile '' "
+ "into table loadtest fields terminated by ','");
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= COUNT; i++) {
sb.append(i + "," + DATA + "\n");
if (i % COMMIT_SIZE == 0) {
InputStream is = new ByteArrayInputStream(sb.toString()
.getBytes());
((com.mysql.jdbc.Statement) pstmt)
.setLocalInfileInputStream(is);
pstmt.execute();
conn.commit();
sb.setLength(0);
}
}
InputStream is = new ByteArrayInputStream(sb.toString().getBytes());
((com.mysql.jdbc.Statement) pstmt).setLocalInfileInputStream(is);
pstmt.execute();
conn.commit();
您可能感兴趣的文章:
相关文章推荐
- java代码执行mysql的数据备份和批量数据插入!
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
- java 下执行mysql 批量插入
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
- java 下执行mysql 批量插入
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
- php+mysqli实现批量执行插入、更新及删除数据的方法
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
- java 下执行mysql 批量插入
- java 下执行mysql 批量插入
- mybatis执行批量更新batch update 的方法(提供oracle,mysql两种写法)
- 【Java 往 MongoDB 插入文档的几种方法】
- java mysql大数据量批量插入与流式读取分析
- java(功能篇) java(mysql)数据库 实现数据批量插入
- C API向MySQL插入批量数据的快速方法——关于mysql_autocommit
- Java-mysql-批量插入
- 试了一下Java转成Exe可执行文件的几种方法
- Java 批量插入数据库(MySQL)数据