Сборка одного оператора 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()
, чтобы назначить предложение values внешнему массиву.