在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数据库在同一台机器上。
答案 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表,请考虑