使用 rewriteBatchedStatements=true
JDBC參數rewriteBatchedStatements=true
透過將多個SQL語句合併到單一網路傳輸中,顯著提高批次資料處理的效率,從而減少網路延遲。
啟用此參數指示 JDBC 驅動程式將大量查詢捆綁到一個資料包中,而不是單獨發送每個資料包。 考慮以下範例,其中使用單獨的 INSERT 語句將各個行插入到「jdbc」表中:
<code class="language-java">try (Connection con = ...; PreparedStatement ps = con.prepareStatement("INSERT INTO jdbc (`name`) VALUES (?)")) { for (int i = 1; i < 1000; i++) { ps.setString(1, "Line " + i + ": ..."); ps.addBatch(); } ps.executeBatch(); }</code>
啟動 rewriteBatchedStatements=true
後,JDBC 驅動程式會傳送包含組合 INSERT 語句的單一資料包,如下所示:
<code class="language-sql">INSERT INTO jdbc (`name`) VALUES ('Line 1: ...'), ('Line 2: ...'), ... ,('Line 999: ...')</code>
至關重要的是,MySQL Connector/J 驅動程式(和其他相容的驅動程式)尊重伺服器的 max_allowed_packet
設定。 它在連接時檢查此限制並動態調整批量大小以防止超過最大資料包大小。如果單一多行 INSERT 太大,驅動程式會自動將其分段為更小的、相容的封包。
透過利用 rewriteBatchedStatements=true
並配置適當的 max_allowed_packet
值,開發人員可以顯著提高批量操作的資料庫互動效能,最大限度地減少網路開銷並最大化吞吐量。
以上是`rewriteBatchedStatements=true` 如何優化 JDBC 批次?的詳細內容。更多資訊請關注PHP中文網其他相關文章!