簡體   English   中英

InnoDB:使用事務批量插入或組合多個查詢?

[英]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 表的速度,請考慮

  • 關閉自動提交模式
  • 關閉唯一鍵檢查
  • 關閉外鍵檢查

請參閱有關這些的 mysql 文檔

暫無
暫無

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

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