Используя Laravel Eloquent, я копирую 7 миллионов строк данных из одной таблицы в моей старой базе данных Mysql и помещая эти строки в разные таблицы в моей новой базе данных Mysql. Проблема в том, что для выполнения этого потребовалось почти один день, и мне нужно повторно выполнить это действие почти для 80M строк. Я использую кусок из 1000 данных за раз. Есть ли способ сделать это более эффективно ?? Вот мой код:Копирование миллионов строк данных из одной базы данных в другую на laravel
DB::connection('oldDataBase')->table('tableToCopy')->chunk(1000, function ($AllData){
foreach ($AllData as $Data){
DB::connection('newDataBase')->table('table1')->insert(
[
column1 => $Data->columnToCopy,
etc..
]);
DB::connection('newDataBase')->table('table2')->insert(
[
column1 => $Data->columnToCopy,
etc..
]);
DB::connection('newDataBase')->table('table3')->insert(
[
column1 => $Data->columnToCopy,
etc..
]);
}
});
Если это всего лишь одноразовая копия, возможно, лучше сделать это как sqldump, а затем запустить выходной скрипт против нового db – Andy
Не делайте этого через laravel. Laravel делает запрос, а затем преобразовывает в коллекции объектов, накладные расходы, которые определенно будут складываться. Сделать mysqldump | mysql -e' или 'mysqldbcopy' или даже более простой' create table like othertable' и 'insert into table select from other table' – apokryfos
Спасибо за ответ, ребята, я сделаю это, как вы предлагаете. –