[英]Laravel from database table to another table 1mill rows, slow
所以基本上,我有2张桌子。 第一个表包含一百万行或其他内容,带有一个称为“ telefon”的空字段。
现在,我得到了第二个表,该表在另一个表中具有“ telefon”的字段值。
我想出了这个解决方案,但这需要永远。 已经一个小时了,检查数据库表时,只完成了1600行。 有没有更快的方法呢? 提前致谢。
DB::table('phones') -> orderBy('id') -> chunk(100, function($old) {
foreach ($old as $x) {
DB::table('companies')
-> where('organisasjonsnummer', $x -> businessCode)
-> update([
'telefon' => $x -> contact
]);
}
});
呵呵,foreach +查询几乎总是不好的。 如果我没记错的话,您想这样做:
UPDATE companies, phones SET companies.telefon = phones.contact WHERE companies.organisasjonsnummer = phones.businessCode
它可能会非常缓慢,如果有上没有索引companies.organisasjonsnummer
和phones.businessCode
列,但它会占用大量的时间,现在对其进行索引一样,所以我不知道是否有索引他们任何好处,如果现在他们以后不会使用。 无论如何,至少在某种程度上,使用单个查询应该更快。
永远记住,当您在循环中使用Eloquent / SQL时,将在每个回合中运行一个命令。 延迟加载也是如此。
在这种情况下,您应该使用\\DB::statement("put your sql here");
或在这种情况下\\DB::update("put your update here");
,让数据库为您服务并开心!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.