1

我有一个程序用于读取 CSV 文件并将数据插入数据库。我遇到了麻烦,因为它需要能够一次插入大记录(最多 10,000 行)数据。起初,我让它循环并一次插入每条记录。这很慢,因为它调用了一个插入函数 10,000 次......接下来我尝试将它组合在一起,以便一次插入 50 行。我认为这种方式将不得不更少地连接到数据库,但它仍然太慢了。将多行 CSV 文件插入数据库的有效方法是什么?此外,我必须在进入数据库之前编辑一些数据(例如,如果两个相同,则在用户名中添加 1)。

4

3 回答 3

1

对于文本文件,您可以使用专门为此而设计的LOAD DATA INFILE命令。默认情况下它将处理 CSV 文件,但具有处理其他文本格式的广泛选项,包括重新排序列、忽略输入行以及在加载数据时重新格式化数据。

于 2013-08-07T19:42:19.877 回答
1

所以我最终使用 fputcsv 将我更改的数据放入一个新的 CSV 文件中,然后我使用 LOAD DATA INFILE 命令将新 csv 文件中的数据放入表中。这将其从 120 秒的 1000 个条目的超时时间更改为大约 10 秒的 10,000 个条目的时间。感谢所有回复的人。

于 2013-08-08T20:27:40.123 回答
0

我有一个疯狂的想法:你能运行多个并行脚本吗,每个脚本都处理 CSV 中的一堆行。

像这样的一些事情:

<?php

// this tells linux to run the import.php in background,
// and releases your caller script.
//
// do this several times, and you could increase the overal time
$cmd = "nohup php import.php [start] [end] & &>/dev/null";
exec($cmd);

此外,您是否尝试过将这些 50 个批量插入的限制增加到 100 或 500 个?

于 2013-08-07T19:58:18.477 回答