我正在尝试从一个数据库中提取大量数据,重命名列,然后将其转储到另一个数据库中。我开始超时,增加了最大执行时间和最大输入时间。这有帮助,但我仍然没有得到所有的数据。我接着补充说:
set_time_limit(0);
ignore_user_abort(1);
这使我能够提取的数据量增加了一倍,但我仍然很短,所以它仍然超时。我想知道是否有更好的方法来做这件事。
我使用的是laravel5.6,php7.2,mysql 5.6
我从一个数据库中提取数据并插入到另一个数据库中。
$availabilities = DB::connection('mysql2')->select('select vi.status as availability_status_code,vi.date as availability_date,v.masterid as im_id from table1 vi
inner join table2 v on v.id = vi.vid where vi.date >= CURDATE() and v.masterid > 0 order by v.masterid,vi.date'); //
foreach($availabilities as $availability) {
Availabilities::create((array)$availability);
}
这是可行的,但正如所指出的那样。
有没有更有效的方法来处理这个问题,或者我应该增加不同的时间限制,直到它起作用?请记住,这将运行一天一次或两次通过作业。
2条答案
按热度按时间gtlvzcf81#
您可以使用:
当然,您应该将其分块,因此您不应该以这种方式插入例如100万条记录,但是您应该将100万条记录分解为例如200条记录的数组。这将比像现在这样分别插入每条记录快得多。
可以使用collection chunk方法对
$availabilities
分成更小的部分guz6ccqo2#
如果数据库用户对数据库都有权限,并且从一个源获取数据和向另一个源添加数据之间不涉及任何处理,则可以尝试在单个查询中执行此操作。
如果涉及到一些处理,并且可以在mysql中完成,您也可以尝试这种方法。