Mysql
MySQL INSERT INTO SELECT 與 BULK INSERTs 性能
目前,我正在嘗試將數據從 複製
TABLE1
到TABLE2
.就插入性能而言,如果我願意,它會相同還是更快
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 行的原則是完全可以接受的。