从csv文件大量插入

时间:2016-03-14 20:00:34

标签: php mysql csv

我想问一下,如果我将在下面解释的情况下最好继续下去:

我通过php在mysql数据库中输入超过200,000行,我从csv文件中取出行,我的问题如下:

我应该解析csv文件,当我读取时插入行,或者我应该解析文件,在数组中放弃所有内容,然后在数据库中使用foreach插入行。

我问这个是因为在数据库中包含数据的速度非常慢。 该表是InnoDB。

我希望我很清楚。

N.B。我无法制作一个" LOAD DATA LOCAL INFILE"因为先前已映射.csv文件中的字段。

谢谢

1 个答案:

答案 0 :(得分:1)

您建议的两个选项几乎一样快,由于额外的内存访问,数组可能会稍微慢一些。

但我认为执行大量插入语句时的瓶颈是数据库通信。因此,可能更快的第三个选项是减少将所有插入数据连接成一个语句的insert语句的数量,例如:

INSERT INTO mytable VALUES(1,2,3),(4,5,6),(7,8,9), ... (10000, 10001, 10002);

据我所知,mysql语句有最大长度,所以可能需要将语句拆分成多个块。

这个答案在合并插入语句时非常明显地提高了性能: https://stackoverflow.com/a/1793209/1696795