Сборка одного INSERT
оператора с несколькими строками намного быстрее в MySQL, чем один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()
инструкции. Это большой победа.
Если у вас есть много столбцов, которые нужно собрать, и один или несколько очень длинных, вы также можете создать внутренний цикл, чтобы сделать то же самое, и использовать его implode()
для назначения предложения значений внешнему массиву.