首頁 > 資料庫 > mysql教程 > 如何優化 JDBC 批量插入以獲得最大 MySQL 效能?

如何優化 JDBC 批量插入以獲得最大 MySQL 效能?

DDD
發布: 2024-12-07 13:38:16
原創
315 人瀏覽過

How Can I Optimize JDBC Batch Inserts for Maximum MySQL Performance?

最佳化 JDBC 批次插入效能

將大量資料插入 MySQL 資料庫需要高效率的批次才能確保最佳效能。雖然一次批量插入 100 萬筆記錄似乎很合理,但有一些技術可以進一步優化此流程。

理解問題

提供的程式碼使用準備好的語句將值插入表中,但它不利用兩個鍵properties:

  • useServerPrepStmts: 當設定為false 時,MySQL將在伺服器而不是客戶端上準備語句,從而減少網路開銷。
  • rewriteBatchedStatements: 當設定為 true 時,MySQL 會重寫批次語句以使用更有效率的多語句執行方法。

最佳化連線

要啟用這些最佳化,請在連線 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板