2017-07-28 86 views
0

我有一个我想插入MySQL数据库的10.000记录列表。在数据库快速插入数据php?

我试图用foreach和简单的INSERT INTO插入它们,但是它花了很多时间插入。

是否有任何方法可以更快地插入这些行?

$contents = file_get_contents("table.txt.001"); 
$pollfields = explode(',', $contents); 

foreach ($pollfields as $key) { 
    $query = "INSERT INTO `table` (`id`, `name`) VALUES (NULL, '$key')"; 
    mysqli_query($conn, $query) or trigger_error(mysqli_error()." in ".$query); 
} 

我看了服用点约puting像更多的价值,从而

"INSERT INTO `table` (`id`, `name`) VALUES (NULL, '$key'),(NULL, '$key'),(NULL, '$key')"; 

的问题是他怎么每次如果使用的foreach插入下一个5例如知道。

+0

http://php.net/manual/en/function.array-chunk.php – CBroe

+2

使用预准备语句将提高性能。 – Juan

+3

如果这是从csv文件加载,然后[LOAD DATA INFILE](https://dev.mysql.com/doc/refman/5.7/en/load-data.html) –

回答

0

创建tempory表相同主表

然后插入在tempory表中的所有条目。

$contents = file_get_contents("table.txt.001"); 
$pollfields = explode(',', $contents); 
$sql = ""; 
foreach ($pollfields as $key) { 
    $sql .= " (NULL , ".$key.") , "; 
} 

$sql = trim($sql,','); 

$query = "INSERT INTO `temp_table` (`id`, `name`) VALUES " . $sql ; 

mysqli_query($conn, $query) or trigger_error(mysqli_error()." in ".$query); 

然后整个数据复制到主表,

INSERT INTO `table` (`id`, `name`) 
SELECT `id` , `name` FROM `temp_table` 

,现在你需要截断temp_table。

如果你想插入数百万条记录,那么ABove过程会更快。

+0

所以你认为这种方法是最快的,我会试试 –

+0

是的,如果主表已经有大量的记录 –

-1

我不得不更新一个MySQL数据库与15000电子商务产品的记录一次。

我用CSV文件将数据导入数据库。你有没有考虑过这个?

- 编辑 -

@GrumpyCrouton确定这里是一个解决方案。

我发现了this link,它提供了一个关于如何获取这10,000条记录并使用Excel电子表格将它们导入数据库的解决方案。

+0

你是怎么做到的,如果我有一个例如10​​000行的文本文件?如果你谈论LOAD IN FILE我不喜欢这个 –

+0

这不提供对这个问题的答案。一旦你有足够的[声誉](https://stackoverflow.com/help/whats-reputation),你将可以[对任何帖子发表评论](https://stackoverflow.com/help/privileges/comment);相反,提供[不需要提问者澄清]的答案(https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。另外,[StackOverflow Tour](https://stackoverflow.com/tour)是一个非常有用的资源! – GrumpyCrouton

+0

'如果你谈论LOAD IN FILE我不喜欢那'为什么你不喜欢它?你甚至尝试过吗?除了可能的偏见或缺乏理解之外,你是否有充分的理由不使用它? –