JDBC大批量插入數據性能優化
來自: http://my.oschina.net/u/2246523/blog/608131
把最終測試效率最高的方式記錄一下,在mysql5.6下下面這種方式比batchUpdate的方式要快N倍
:
package com.jdbc.batch; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class BufferQuery { private static Connection mysqlConn = null; private static ResultSet rs = null; // 總條數 private static int allCount = 10000; // 分批條數 private static int preCount = 1000; // 計數器 private static int count = 0; private static String insertSQL = "insert into users(firstname, lastname, age) values(?, ?, ?)"; private static PreparedStatement mysqlPs = null; public static void main(String[] args) throws SQLException { try { StringBuilder sb = new StringBuilder(); sb.append("insert into users(firstname, lastname, age) values"); mysqlConn = DBUtils.getMySqlConn(); mysqlPs = mysqlConn.prepareStatement(insertSQL); mysqlConn.setAutoCommit(false); long start = System.currentTimeMillis(); for (int i = 1; i <= allCount; i++) { if(i > 1) sb.append(","); sb.append("('aa"+ i +"','bb',23)"); if(i % preCount == 0){ System.out.println("導入進行===>" + (++count * preCount) + "條"); } } mysqlPs.executeUpdate(sb.toString()); long end = System.currentTimeMillis(); System.out.println("數據導入完畢,所用時間為: " + (end - start) + " ms"); } catch (Exception e) { mysqlConn.rollback(); System.out.println("數據出錯,已進行回滾"); throw new RuntimeException(); } finally { mysqlConn.commit(); DBUtils.free(rs, mysqlPs, mysqlConn); } } }
本文由用戶 nura4704 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!