我需要使用laravel从数据库中获取50万行,并将它们导出到excel文件中。问题是,im导出的资源有很多连接,当我这样导出它时(伪代码)
foreach( myResources as resource ) {
convertToExcelRow(resource);
convertToAnotherExcelRow(resource->joinedTable);
}
laravel创建了50万个查询+另一个这么多的查询来进行连接。
现在,对于大多数情况,我可以使用eager loading,它将在一个查询中加载所有内容(要快得多),但是对于如此大的查询,laravel将触发mysql错误(加上它非常慢),因为 WHERE id IN
(数十万个ID)
有没有一种方法可以使用批处理快速加载?e、 g将100000个id列表分解为10个查询,每个查询有10000个id或类似的内容。
1条答案
按热度按时间z9ju0rcb1#
考虑使用
chunk
将任务分解为可管理部分的方法,如:注:
玩转区块大小(500只是一个例子)。在这种情况下,表中每500行应该有2个查询。如果选择5000,查询可能会减少10倍,但由于请求的联接数量增加,加载时间可能不会提高。