java 下执行mysql 批量插入
来源:互联网 发布:淘宝二维码生成器 编辑:程序博客网 时间:2024/04/29 05:39
java 下执行mysql 批量插入
1000次插入方法的比较。
方法1:
MyISAM:246.6秒、InnoDB:360.2秒
方法2: 使用事务,不自动commit
InnoDB:31.5秒
方法3: executeBatch
InnoDB:5.2秒
上面的使用时必须
1)rewriteBatchedStatements=true
2)useServerPrepStmts=true
方法4:先LOAD再COMMIT
这个最快4.6秒
方法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秒
0 0
- java 下执行mysql 批量插入
- java 下执行mysql 批量插入
- Java-mysql-批量插入
- MySql批量插入优化Sql执行效率
- Java批量插入Oracle语句执行过程。
- Java批量插入Oracle语句执行过程
- java代码执行mysql的数据备份和批量数据插入!
- linux下批量插入数据到mysql
- 在windows下批量执行mysql脚本
- linux下批量执行mysql指令实例
- Java 批量插入数据库(MySQL)数据
- Java 批量插入数据库(MySQL)数据
- 【mysql】 mysql批量插入
- mysql批量插入数据
- mysql 批量插入 方法
- mysql批量插入
- mysql批量插入语句
- mysql批量插入数据
- 使用异步消息处理更新UI线程
- 关于Xcode中一些技巧
- java se与java web项目目录结构(最后为应用SSH框架目录结构)
- [RFID]IC卡克隆(三)Proxmark3测试存在默认密码的IC卡
- 快速体验MyCAT
- java 下执行mysql 批量插入
- h264基础概念
- windows连接代理服务器,总是弹出输入用户名和密码的框的问题
- 内存对齐以及如何关闭内存对齐
- C++11 range for 遍历多维数组, 迭代变量添加引用 "&"的问题
- 感情宣泄
- 黑马程序员—网络编程
- C#中的线程(一)入门
- BadUsb----结合实例谈此类外设的风险