@phpcoder81

Как добавить в БД огромный массив?

Ребят, есть некий массив в php, который очень здоровый, около 10000 ключей, внутри каждого по 10 параметров. Приходится разбивать массив на части и делать много подзапросов иначе не вставляет вообще ничего.
$a = array_chunk($a, 300, TRUE);
foreach($a as $k => $v){
	//query insert + php implode
}

А нельзя ли как-то добавить за 1 запрос?
  • Вопрос задан
  • 352 просмотра
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Одним инсертом скорее всего вставить не получится, как на стороне мускуля есть ограничения по буферу запроса так и со стороны пхп есть ограничения по таймауту, длинне передаваемого запроса и проч( много настроек короче.) Как написал Eugene Mosyukov есть 3 варианта, но если вам необходимо использовать только код - разбивайте на инсерты по 100 строк в цикле, это 100 запросов у вас выйдет, должно быстро вставиться, можно до 200-300 строк за раз попробовать, если есть возможность этот массив получать всегда то экспериментом только вывести количество можно.

Макс Васильев:
Я слышал, что множественные запросы в цикле не приветствуются.
да, это плохая практика, но она относится к задачам типа "в цикле делаем вычисления, и тут же в цикле делаем запрос". Создаются куча запросов к базе на пустом месте, там где можно сформировать 1 запрос и после цикла отправить все сразу 1 запросом. У вас другая ситуация - данных много, больше чем за раз обрабатывает буфер бд, цикл здесь для преодоления оверхеда по размеру, тут он будет в тему, ибо все равно не отправляет по 1 строке, а формирует большие запросы с разовым исполнением
Ответ написан
GeneMoss
@GeneMoss
void
Вариант 1.
1. Сгенерировать один большой SQL-запрос.
2. Выполнить запрос.

Вариант 2.
1. Сгенерировать SQL-файл.
2. Загрузить файл с помощью консоли и команды mysql.

Вариант 3.
1. Сгенерировать csv-файл.
2. Загрузить csv через LOAD DATA INFILE.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы