使用SQL插入大量数据的效率

时间:2013-08-07 19:32:18

标签: php mysql database-connection sql-insert

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

3 个答案:

答案 0 :(得分:1)

对于文本文件,您可以使用LOAD DATA INFILE命令来完成此操作。它默认处理CSV文件,但是有广泛的选项来处理其他文本格式,包括重新排序列,忽略输入行,以及在加载时重新格式化数据。

答案 1 :(得分:1)

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

答案 2 :(得分: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?