1つのINSERT
をアセンブルします MySQLでは、複数行のステートメントは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()
を使用することもできます。 値句を外部配列に割り当てます。