所以基本上,我有两张桌子。 第一个表包含100万行或其他内容,其中一个空字段称为' 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
]);
}
});
答案 0 :(得分:1)
UPDATE companies, phones SET companies.telefon = phones.contact WHERE companies.organisasjonsnummer = phones.businessCode
如果companies.organisasjonsnummer
和phones.businessCode
列上没有索引,可能会非常慢,但现在也可能需要花费大量时间对其进行索引,所以我不确定是否有任何索引如果以后不再使用它们,现在可以将它们编入索引。无论如何,使用单个查询至少在某种程度上应该更快。
答案 1 :(得分:0)
永远记住,当你在循环中使用Eloquent / SQL时,你将为每一轮运行一个命令。 这同样适用于延迟加载。
在这种情况下,你应该使用\DB::statement("put your sql here");
或者在这种情况下使用\DB::update("put your update here");
,让数据库为你做服务并且开心!。