簡體   English   中英

使用一條語句插入多行與在MySQL中批量插入

[英]Insert multiple rows using one statement vs batch insert in mysql

哪一個會給我更好的表現?

  1. 使用Java只是將值循環並添加到sql字符串中,然后立即執行該語句? 請注意,還使用PreparedStatement。

    INSERT INTO tbl ( c1 , c2 , c3 ) VALUES ('r1c1', 'r1c2', 'r1c3'), ('r2c1', 'r2c2', 'r2c3'), ('r3c1', 'r3c2', 'r3c3')

  2. 如下使用批處理執行。

    String SQL_INSERT = "INSERT INTO tbl (c1, c2, c3) VALUES (?, ?, ?);";

     try ( Connection connection = database.getConnection(); PreparedStatement statement = connection.prepareStatement(SQL_INSERT); ) { int i = 0; for (Entity entity : entities) { statement.setString(1, entity.getSomeProperty()); // ... statement.addBatch(); i++; if (i % 1000 == 0 || i == entities.size()) { statement.executeBatch(); // Execute every 1000 items. } } } 

幾年前,我做了一個演講,我稱之為快速加載數據! 我比較了許多不同的盡快插入數據的方法,並對它們進行了基准測試。

LOAD DATA INFILE比任何其他方法快得多。

但是還有其他影響速度的因素,例如數據類型和硬件類型,以及其他並發數據庫客戶端對系統的負載。 我得到的結果僅描述了Macbook Pro的性能。

最終,您需要在服務器上測試您的特定情況以獲得最准確的答案。

這就是成為一名軟件工程師的目的。 您並非總能得到湯匙喂給您的答案。 您必須進行一些測試以確認它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM