Laravel从数据库表到另一个表1千行,慢

时间:2016-04-28 15:38:24

标签: php database laravel

所以基本上,我有两张桌子。 第一个表包含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
                ]);
        }
    });

2 个答案:

答案 0 :(得分:1)

嗯,foreach +查询几乎总是坏的。如果我没弄错的话,你想这样做:

UPDATE companies, phones SET companies.telefon = phones.contact WHERE companies.organisasjonsnummer = phones.businessCode

如果companies.organisasjonsnummerphones.businessCode列上没有索引,可能会非常慢,但现在也可能需要花费大量时间对其进行索引,所以我不确定是否有任何索引如果以后不再使用它们,现在可以将它们编入索引。无论如何,使用单个查询至少在某种程度上应该更快。

答案 1 :(得分:0)

永远记住,当你在循环中使用Eloquent / SQL时,你将为每一轮运行一个命令。 这同样适用于延迟加载。

在这种情况下,你应该使用\DB::statement("put your sql here");或者在这种情况下使用\DB::update("put your update here");,让数据库为你做服务并且开心!。