2017-07-28 81 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我不喜歡那'爲什麼你不喜歡它?你甚至嘗試過嗎?除了可能的偏見或缺乏理解之外,你是否有充分的理由不使用它? –