Mysql

MySQL INSERT INTO SELECT 與 BULK INSERTs 性能

  • July 15, 2020

目前,我正在嘗試將數據從 複製TABLE1TABLE2.

就插入性能而言,如果我願意,它會相同還是更快

  • BULK INSERT手動(即通過 BULK 將每 10K 記錄插入到 TABLE2 中INSERT INTO TABLE2 VALUES (1,2), (5,5), ...),而不是
  • INSERT INTO TABLE2 SELECT * FROM TABLE1

您必須使用 BULK INSERT。

為什麼不INSERT INTO TABLE2 SELECT * FROM TABLE1???

執行INSERT INTO TABLE2 SELECT * FROM TABLE1需要一個事務。

想像一下執行單個回滾將如何填充撤消日誌。

如果該事務失敗並回滾,則會創建大量表碎片。

為什麼要BULK INSERT手動???

這減輕了 InnoDB 儲存引擎保存大量撤消資訊的壓力。

範例:mysqldump

你有沒有註意到在重新載入 mysqldump 時,一次插入了數百或數千行?如果你像這樣 grep mysqldump:

grep "^INSERT" dump.sql

您將看到許多帶有 INSERT 的行。預設情況下,每個 INSERT 都是擴展插入。這允許每個 INSERT 命令插入 100 行。因此,您已經建議的一次 BULK INSERT 10K 行的原則是完全可以接受的。

引用自:https://dba.stackexchange.com/questions/270906