私は挿入コマンドを使用して PHP 経由で大規模なデータセットを MySQL テーブルに渡していますが、1 マイルの長い文字列の末尾に各値を追加して実行する以外のクエリを使用して、一度に約 1000 行を挿入できるかどうか疑問に思っています。私は CodeIgniter フレームワークを使用しているので、その機能も利用できます。
ベストアンサー1
MySQL では、 1 つのINSERT
ステートメントを複数の行で組み立てる方が、1 行に 1 つのステートメントを組み立てるよりもはるかに高速ですINSERT
。
そうは言っても、PHP で文字列処理の問題が発生している可能性があります。これは実際には言語の問題ではなく、アルゴリズムの問題です。基本的に、大きな文字列を扱うときは、不要なコピーを最小限に抑える必要があります。主に、連結を避ける必要があります。数百行を一度に挿入するなど、大きな文字列を作成する最も高速でメモリ効率の高い方法は、implode()
関数と配列の割り当てを利用することです。
$sql = array();
foreach( $data as $row ) {
$sql[] = '("'.mysql_real_escape_string($row['text']).'", '.$row['category_id'].')';
}
mysql_query('INSERT INTO table (text, category) VALUES '.implode(',', $sql));
このアプローチの利点は、連結ごとにこれまで組み立てたSQL文をコピーして再コピーする必要がないことです。代わりに、PHPはこれを行います。一度声明の中でimplode()
、これは大きい勝つ。
まとめる列が多数あり、そのうちの 1 つ以上が非常に長い場合は、同じことを実行する内部ループを構築し、それを使用してimplode()
値の句を外部配列に割り当てることもできます。