繁体   English   中英

Laravel从数据库表到另一个表的1mill行,速度很慢

[英]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.organisasjonsnummerphones.businessCode列,但它会占用大量的时间,现在对其进行索引一样,所以我不知道是否有索引他们任何好处,如果现在他们以后不会使用。 无论如何,至少在某种程度上,使用单个查询应该更快。

永远记住,当您在循环中使用Eloquent / SQL时,将在每个回合中运行一个命令。 延迟加载也是如此。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM