java 下执行mysql 批量插入
2013-12-17 10:00
337 查看
原文地址:http://www.cnblogs.com/end/archive/2012/10/25/2738818.html
1000次插入方法的比较。
方法1:
Java code
MyISAM:246.6秒、InnoDB:360.2秒
方法2: 使用事务,不自动commit
Java code
InnoDB:31.5秒
方法3: executeBatch
Java code
InnoDB:5.2秒
上面的使用时必须
1)rewriteBatchedStatements=true
2)useServerPrepStmts=true
方法4:先LOAD再COMMIT
Java code
这个最快4.6秒
1000次插入方法的比较。
方法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();
这个最快4.6秒
相关文章推荐
- java 下执行mysql 批量插入
- java代码执行mysql的数据备份和批量数据插入!
- java 下执行mysql 批量插入
- java 下执行mysql 批量插入
- java 下执行mysql 批量插入的几种方法及用时
- Java批量插入Oracle语句执行过程。
- 以CSV文件导入MySQL的批量数据插入操作之Java操作
- Java 批量插入数据库(MySQL)数据
- java mysql大数据量批量插入与流式读取分析
- php+mysqli实现批量执行插入、更新及删除数据的方法
- Java 批量插入数据到数据库(MySQL)中
- java mysql大数据量批量插入与流式读取分析
- 批量执行Sql语句,MySQL存储过程Java复现
- java mysql大数据量批量插入与流式读取分析
- java mysql大数据量批量插入与流式读取分析
- Java JDBC 批量插入执行时问题
- Java--批量插入更新在一条sql里解决-mybatis-mysql-联合主键(建立唯一索引)
- Java 批量插入数据库(MySQL)数据
- java mysql大数据量批量插入与流式读取分析
- java mysql分页查询大量数据,批量插入