php - 简单的 Laravel SELECT 语句正在耗尽内存

标签 php mysql laravel laravel-4

我在 Laravel 中运行了一个相当简单的选择语句。当我运行它时,我收到“允许的内存大小为 33554432 字节耗尽(已尝试分配 262144 字节)”错误消息。

当我在 MySQL 中运行查询时,我返回了约 56k 行,仅用了 2.0 毫秒。我不明白为什么 Laravel 会因为这么简单的操作而窒息。我究竟做错了什么?我已经尝试删除 group by,将其更改为 order by,并删除 PHP 中的重复项,但这仍然没有解决问题。

我的 Laravel 代码:

DB::connection()->disableQueryLog();

$connections = DB::table('some_table')
        ->whereIn('some_table.companyid',array_keys(Access::companies()))
        ->whereIn('some_table.campaignid',$map['campaigns'])
        ->whereNull('some_table.deleted_at')
        ->groupBy('some_table.employeeid')
        ->groupBy('some_table.bossid')
        ->select('id')
        ->get();

查询结果:

SELECT
    `id` 
FROM 
    `some_table` 
WHERE 
    `some_table`.`companyid` in (1,4,16,18,20,40,42,70,71,88,97,105,106,107,109,115,118,119,122,128,130,131,132,135,143,147,2,5,6,14,19,21,23,29,36,37,38,39,43,44,45,46,47,52,54,56,61,62,67,68,72,73,74,75,76,77,78,79,80,81,82,83,86,87,89,90,92,93,94,95,96,99,100,102,103,108,110,111,112,116,120,124,125,126,127,129,136,138,140,141,144,145,146,148,149,150,154,155,3,48,49,50,84,114,142) 
    AND 
    `some_table`.`campaignid` in (110) 
    AND
    `some_table`.`deleted_at` is null 
GROUP BY `some_table`.`employeeid`, `some_table`.`bossid`

最佳答案

PHP 也使用内存来执行查询。因此,从 PHP 应用程序执行查询确实会比直接从 MySQL 执行查询使用更多的内存。

我做了一个简单的计算,33554432 字节等于 32MB。所以我建议修改您的 php.ini 设置。这应该让您输出数据,然后您可以从那里调整您的 SQL。

在你的 php.ini 中:

memory_limit=32M

关于php - 简单的 Laravel SELECT 语句正在耗尽内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22185122/

相关文章:

php - PHP 中的::class 是什么?

php - 将表中的计数反射(reflect)到字段(MySQL)

php - 如何使用 Laravel 重启 Apache?

php - Laravel 迁移两表外键依赖

php - 抓取 Javascript 生成的网站

javascript - GetUIkit3 可排序 : Callback

php - 将 SQL 数据库中的数据显示到 php/html 表中

MYSQL 特定的 SELECT 语句

mysql - Laravel 4.0 级联删除与多态关系

php - mysql中如何清除某一列的数据而不删除它