最佳化 JDBC 批次插入效能
將大量資料插入 MySQL 資料庫需要高效率的批次才能確保最佳效能。雖然一次批量插入 100 萬筆記錄似乎很合理,但有一些技術可以進一步優化此流程。
理解問題
提供的程式碼使用準備好的語句將值插入表中,但它不利用兩個鍵properties:
最佳化連線
要啟用這些最佳化,請在連線 URL 中設定這兩個屬性:
Connection c = DriverManager.getConnection("jdbc:mysql://host:3306/db?useServerPrepStmts=false&rewriteBatchedStatements=true", "username", "password");
修改後的程式碼
透過這些最佳化,更新後的程式碼變成:
try { // Disable auto-commit c.setAutoCommit(false); // Create a prepared statement String sql = "INSERT INTO mytable (xxx), VALUES(?)"; PreparedStatement pstmt = c.prepareStatement(sql); Object[] vals=set.toArray(); for (int i=0; i<vals.length; i++) { pstmt.setString(1, vals[i].toString()); pstmt.addBatch(); } // Execute the batch int [] updateCounts = pstmt.executeBatch(); System.out.append("inserted "+updateCounts.length); } catch (SQLException e) { e.printStackTrace(); }
結論
透過設定「 useServerPrepStmts」和「rewriteBatchedStatements」屬性,可顯著優化批次插入過程,減少所需的運行時間插入大量資料。
以上是如何優化 JDBC 批量插入以獲得最大 MySQL 效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!