[英]InnoDB: Bulk insert using transaction OR combine multiple queries?
在 InnoDB 中進行批量INSERT
時,我應該使用事務嗎
START TRANSACTION;
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3);
INSERT INTO tbl_name (a,b,c) VALUES(4,5,6);
INSERT INTO tbl_name (a,b,c) VALUES(7,8,9);
COMMIT TRANSACTION;
或者組合多個查詢?
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
如果重要的話,我使用的是 PHP 並且 MySQL 數據庫在同一台機器上。
我建議像底部示例中那樣組合多個查詢。
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
如果任何一個值對失敗,則不會插入任何數據。 此方法還向數據庫發送較少的字符和往返。 較少字符的含義可能沒有那么吸引人,但它仍然具有輕微的優勢。
編輯:
蒂姆有一個很好的問題。 讓我包含MySQL 文檔中的信息
如果您同時從同一客戶端插入多行,請使用帶有多個 VALUES 列表的 INSERT 語句一次插入多行。 這比使用單獨的單行 INSERT 語句快得多(在某些情況下快很多倍)。 如果要將數據添加到非空表,則可以調整 bulk_insert_buffer_size 變量以加快數據插入速度。
第一個版本在技術上不是批量插入,您一次插入 1 條記錄。 這是導入大量數據最慢的方法。
第二個選項稱為批量插入,速度要快得多。
但是,您也可以將事務與批量插入一起使用。
第三個選項是使用LOAD DATA INFILE命令加載數據,它甚至更快。
要加快將大量數據插入 innodb 表的速度,請考慮
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.