Insert multiple rows
Insert multiple rows
Здравствуйте, подскажите как оптимальне(быстрее) всего залить 2000000 тестовых записей в базу? Батчинсерт постоянно дает выхлоп по памяти, когда убрпал ограничение, то все отработало, но ничего не залило. Я пробовал изначально работать с одним объектом и сейвить по одной записи(setIsNewRecord в начале каждой итерации), но это очень долго. И ещё один вопрос, надо будет создать ещё примерно 3-4 миллиона данных и связать их с вышеупомянутыми 2кк рандомно, то есть создавая вторую сущность связать её внешним ключем с первой случайным образом. Как это все оптимизировать? Я понимаю что сид базы происходит очень редко, но всё же это очень долго.
Re: Insert multiple rows
Как по мне, это лучше сделать средствами бд
Re: Insert multiple rows
https://randomuser.me/api/?results=1000&nat=USМожно как-то генерировать нормальные имена и фамилии например? С помощью фейкера получается более менее что-то нормальное сгенерить
Re: Insert multiple rows
Можно просто в PHP-скрипте сделать вывод в SQL-файл, а файл потом в консоли загрузить в БД.
Re: Insert multiple rows
Вот такой код миллион записей заливает без проблем
$update здесь вида
Код: Выделить всё
$transaction = Yii::$app->db->beginTransaction();
try {
foreach ($select as $row) {
extract($row);
$update->execute();
$updatedRowCount++;
if ($updatedRowCount % 5000 === 0) {
$transaction->commit();
$transaction = Yii::$app->db->beginTransaction();
}
}
$transaction->commit();
} catch (\Throwable $ex) {
$transaction->rollBack();
throw $ex;
}
Код: Выделить всё
INSERT INTO table_name (id, field_name)
VALUES (:id, :field_name)
ON DUPLICATE KEY UPDATE
field1 = :field_name
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.