InnoDB:使用事务批量插入或组合多个查询?

时间:2015-12-24 04:38:32

标签: mysql

在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数据库在同一台机器上。

2 个答案:

答案 0 :(得分:2)

我建议您在底部示例中组合多个查询。

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

如果任一值对失败,则不会插入任何数据。此方法还向DB发送较少的字符和往返。较少字符的含义可能不那么吸引人,但它仍然具有轻微的优势。

编辑:

蒂姆提出了一个很好的问题。我请包含来自MySQL doc

的信息
  

如果要同时从同一客户端插入多行,请使用带有多个VALUES列表的INSERT语句一次插入多行。与使用单独的单行INSERT语句相比,这要快得多(在某些情况下要快很多倍)。如果要将数据添加到非空表中,则可以调整bulk_insert_buffer_size变量以使数据插入更快。

答案 1 :(得分:0)

第一个版本在技术上不是批量插入,您一次插入1条记录。这是导入大量数据的最慢方法。

第二个选项称为批量插入,速度更快。

但是,您也可以使用批量插入的交易。

第三个选项是使用LOAD DATA INFILE命令加载数据,这更快。

为了加快将massdata插入innodb表,请考虑

  • 关闭自动提交模式
  • 关闭唯一密钥检查
  • 关闭外键检查

请参阅mysql documentation on these