2017-07-28 8 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); 
} 

私はこの問題は、彼が使用foreachの場合、たとえば次の5を挿入するたびに、知っている方法ですので

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

などの複数の値をputingについてsomehtingを読みました。

+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をTRUNCATEする必要があります。

上記の処理は、何百万ものレコードを挿入したい場合は高速になります。

+0

あなたはこの方法が最も速いと思いますので、試してみます –

+0

はい、既に大きなテーブルのレコードがない場合はこの方法を使います –

-1

私は15,000レコードの電子商取引製品でMySQLデータベースを一度更新する必要がありました。

データをデータベースにインポートするためにCSVファイルを使用しました。あなたはこれを考えましたか?

--EDIT--

ここでOK @GrumpyCroutonは、ソリューションです。

私はthis linkを見つけました。これらの10,000レコードを取得し、Excelスプレッドシートを使用してそれらをデータベースにインポートする方法に関する解決方法を提供します。

+0

あなたはそれをやります、もし私が例えば10000行のテキストファイルを持っていたら?あなたが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について話したら、そんなことはしないでください。なぜあなたはそれが好きですか?あなたはそれを試したことがありますか?あなたはおそらく偏見以外の、あるいは理解の欠如以外のものを使用していない正当な理由がありますか? –

関連する問題