我想问一下,如果我将在下面解释的情况下最好继续下去:
我通过php在mysql数据库中输入超过200,000行,我从csv文件中取出行,我的问题如下:
我应该解析csv文件,当我读取时插入行,或者我应该解析文件,在数组中放弃所有内容,然后在数据库中使用foreach插入行。
我问这个是因为在数据库中包含数据的速度非常慢。 该表是InnoDB。
我希望我很清楚。
N.B。我无法制作一个" LOAD DATA LOCAL INFILE"因为先前已映射.csv文件中的字段。
谢谢
答案 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