首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >雄辩的渴望成批的负载

问雄辩的渴望成批的负载
EN

Stack Overflow用户
提问于 2018-04-30 12:30:34
回答 1查看 2.1K关注 0票数 1

我需要使用Laravel从数据库中获取50万行并将它们导出到excel文件中。问题是,im导出的资源有相当多的联接,当我像这样导出它时(伪代码)。

代码语言:javascript
复制
 foreach( myResources as resource ) {
   convertToExcelRow(resource);
   convertToAnotherExcelRow(resource->joinedTable);
 }

Laravel创建了50万个查询,另一个创建了大量的连接。

现在,在大多数情况下,我可以使用急切的加载,它将在一个查询中加载所有内容(要快得多),但是对于如此大的查询,laravel将触发mysql错误(而且非常慢),因为进入WHERE id IN的行it列表(几十万个it)。

是否有一种使用批次快速加载的Laravel方式?例如,将100 000个id列表分解为10个查询,每个查询有10000个id或类似的内容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-01 14:32:04

考虑使用chunk方法将任务分解为可管理的部分,如下所示:

代码语言:javascript
复制
Resource::with(['relationship1','relationship2'])->chunk(500, function($resources) {
    $resources->each(function($resource) {
        $this->convertToExcelRow($resource);
        $this->convertToAnotherExcelRow($resource->joinedTable);
    });
});

注意:

玩块大小(500只是一个例子)。在这种情况下,您应该为表中的每500行获得2个查询。如果选择5000,查询可能会减少10倍,但由于请求的联接数量增加,加载时间可能不会增加。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50100603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档