MySQL多插入性能

Ale*_*tau 2 mysql sql performance insert

我的数据包含大约30 000条记录.我需要将这些数据插入MySQL表中.我将这些数据分组打包1000并创建多个这样的插入:

INSERT INTO `table_name` VALUES (data1), (data2), ..., (data1000);
Run Code Online (Sandbox Code Playgroud)

如何优化此插入的性能?我每次可以插入超过1000条记录吗?每行包含大小约1KB的数据.谢谢.

Rav*_*att 7

您需要检查 mysql 服务器配置,并专门检查缓冲区大小等。

您可以从表中删除索引(如果有)以使其更快。一旦数据进入就创建索引。

看这里,你应该得到你需要的一切。

http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

它说,一个带有多个值的插入语句比多个插入语句快得多。


Sep*_*eph 5

尝试将批量插入包装在事务中.

START TRANSACTION
INSERT INTO `table_name` VALUES (data1), (data2), ..., (data1000);
COMMIT
Run Code Online (Sandbox Code Playgroud)

这可能会提高性能,我不确定mySQL是否可以部分提交批量插入(如果它不能,那么这可能不会真正帮助太多)

请记住,即使在1.5秒内,对于每个大小约为1k的30,000条记录,您的执行速度仍为20MB/s,实际上您可以根据硬件设置限制驱动器.

然后建议调查SSD或更改你的Raid设置或获得更快的机械驱动器(有很多关于使用安装在SSD上的SQL数据库的利弊的在线文章).

  • 这对我来说很有帮助.我正在做100个块(每个GET请求最多api记录)INSERT INTO ...在DUPLICATE KEY UPDATE ...使用$ mysqli-> multi_query()将123k记录花费2.30小时,用事务包装每个块所有123k记录花了20分钟.我去吃午饭很开心. (3认同)