MySQL 批量插入跟多次單筆插入的效能差異

批量插入會 rollback 回滾

如果批量插入 100 筆資料,其中一筆有問題的話,其他筆的資料也會回滾,所以結果就是就是 100 筆通通成功,或者 100 筆都不成功。

批量插入的效能比較好

我是參考這三個文章:

  1. MySQL 批量插入数据,一次插入多少行数据效率最高?

  2. Which is faster: multiple single INSERTs or one multiple-row INSERT

  3. 8.2.5.1 Optimizing INSERT Statements

在我們寫的應用程式要使用 MySQL 的時候會經過下面這些動作,每個動作所消耗的時間大概是數字寫的那樣,可以看到連接到 MySQL 佔了大多數的時間,所以單筆插入的話就等於是要每次都走過下面的這些動作其中也包含了連接,若改成用批量插入就可以節省很多時間了。

  • 連接: (3)

  • 發送 query 到 server: (2)

  • 解析 query: (2)

  • 插入數據: (1 × size of 筆數)

  • 插入索引Inserting indexes: (1 × 索引數量)

  • 關閉: (1)

要注意 buffer pool size 緩衝池大小

預設大小是 128 MB,如果執行的時候只剩下 25%,SQL 語句就會執行失敗了,可以用下面這個查 MySQL innodb 相關的參數。

SHOW VARIABLES LIKE '%innodb_buffer%'