Я передаю большой набор данных в таблицу MySQL через PHP, используя команды вставки, и мне интересно, можно ли вставлять примерно 1000 строк за раз с помощью запроса, кроме добавления каждого значения в конце строки длиной в милю, а затем выполняя это. Я использую фреймворк CodeIgniter, поэтому его функции также доступны мне.
php
mysql
codeigniter
insert
bulkinsert
toofarsideways
источник
источник
Ответы:
Сборка одного
INSERT
оператора с несколькими строками намного быстрее в MySQL, чем одинINSERT
оператору на строку.Тем не менее, похоже, что вы можете столкнуться с проблемами обработки строк в PHP, что на самом деле является проблемой алгоритма, а не языка. По сути, при работе с большими строками вы хотите минимизировать ненужное копирование. В первую очередь это означает, что вы хотите избежать конкатенации. Самый быстрый и эффективный с точки зрения памяти способ построить большую строку, например, для вставки сотен строк за одну, - это воспользоваться преимуществами
implode()
функции и назначения массива.Преимущество этого подхода состоит в том, что вы не копируете и не копируете ранее собранный оператор SQL с каждой конкатенацией; вместо этого PHP делает это один раз в
implode()
инструкции. Это большой победа.Если у вас есть много столбцов, которые нужно собрать, и один или несколько очень длинных, вы также можете создать внутренний цикл, чтобы сделать то же самое, и использовать его
implode()
для назначения предложения значений внешнему массиву.источник
mysql_real_escape_string
сmysqli_real_escape_string
иmysql_query
с ,mysqli_query
как я использую MySQLi и они были устаревшим PHP5. Большое спасибо!mysql_*
был удален из PHP, поэтому обязательно используйтеmysqli_*
интерфейс.Codeigniter теперь поддерживает множественную вставку / пакетную вставку. У меня была такая же проблема. Хоть и поздно отвечать на вопрос, но кому-то поможет. Вот почему отвечу на этот вопрос.
источник
Вы можете подготовить запрос для вставки одной строки с помощью класса mysqli_stmt, а затем выполнить итерацию по массиву данных. Что-то вроде:
Где «idsb» - это типы связываемых данных (int, double, string, blob).
источник
Я знаю, что это старый запрос, но я просто читал и думал, что добавлю то, что нашел в другом месте:
mysqli в PHP 5 - это объект с некоторыми хорошими функциями, которые позволят вам ускорить время вставки для ответа выше:
Отключение автоматической фиксации при вставке большого количества строк значительно ускоряет вставку, поэтому отключите его, затем выполните, как указано выше, или просто создайте строку (sqlCombined), которая представляет собой множество операторов вставки, разделенных точками с запятой, и с несколькими запросами они справятся нормально.
Надеюсь, это поможет кому-то сэкономить время (поиск и вставка!)
р
источник
Вы всегда можете использовать mysql
LOAD DATA
:выполнять массовую вставку, а не использовать кучу
INSERT
операторов.источник
LOCAL
бит.Ну, вы не хотите выполнять 1000 вызовов запросов, но это нормально:
В зависимости от источника данных заполнение массива может быть таким же простым, как открытие файла и выгрузка содержимого в массив с помощью
file()
.источник
источник
Вы можете сделать это несколькими способами в codeigniter, например
источник
Хотя уже поздно отвечать на этот вопрос. Вот мой ответ на то же самое.
Если вы используете CodeIgniter, вы можете использовать встроенные методы, определенные в классе query_builder.
$ This-> db-> insert_batch ()
Создает строку вставки на основе предоставленных вами данных и выполняет запрос. Вы можете передать в функцию массив или объект. Вот пример использования массива:
);
Первый параметр будет содержать имя таблицы, второй - ассоциативный массив значений.
Вы можете найти более подробную информацию о query_builder здесь
источник
Я создал класс, который выполняет многострочность и используется следующим образом:
где класс определяется следующим образом:
источник
Используйте пакет вставки в codeigniter, чтобы вставить несколько строк данных.
источник
Я создал эту простую функцию, которую вы, ребята, можете легко использовать. Вам нужно будет передать имя
($tbl)
таблицы, поле таблицы вместо($insertFieldsArr)
ваших данных вставки, массива данных($arr)
.источник