gpt4 book ai didi

php - Laravel 数据库外观内存使用情况

转载 作者:行者123 更新时间:2023-12-02 06:16:52 25 4
gpt4 key购买 nike

我发现了用 php pdo 编写的很好的示例,它有助于迭代大量数据,而无需实际为整组结果分配内存:

    $sql = 'SELECT * from playlists limit 50000';
$statement = $pdo->prepare($sql);
$statement->execute();

while (($result = $statement->fetch(PDO::FETCH_ASSOC)) !== false) {
//do something
}

我进行了一项调查,这种方法使用 18mb 内存。

如果我获取像这样的所有结果 $results = $statement->fetchAll(PDO::FETCH_ASSOC); 内存使用量将增加到 35mb

使用laravel的Illuminate/database组件和非常相似的方法DB::table('playlists')->limit(50000)->get();也使用35mb 内存。

  • 如何使用 Laravel 的 eloquent 或 DB 门面实现第一种方法?
  • 您能否推荐一些关于内存使用差异如何形成的文章?

谢谢

最佳答案

当您使用 php(mysql 函数或 PDO)执行 SQL 查询时,从查询返回的所有数据都会作为“结果集”加载到内存中。

为了使用“结果集”中的数据,您必须在常规 php 数组/对象中获取它们。

PDOStatement::fetch - 从结果集中提取一行到内存中。

PDOStatement::fetchAll - 将结果集中的所有行提取到内存中,从而使内存使用量加倍。

Eloquent 有能力 chunk结果集。这相当于在 PDO 中执行“X 次 fetch”。

但是,如果您正在处理非常大的结果集,请考虑使用 SQL 限制。

关于php - Laravel 数据库外观内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55030098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com