简单的Laravel SELECT语句耗费内存

时间:2014-03-04 23:07:35

标签: php mysql laravel laravel-4

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

当我在MySQL中运行查询时,我得到~56k行返回,只需要2.0ms。我不明白为什么Laravel会窒息这么简单的操作。我究竟做错了什么?我已经尝试删除组,将其更改为顺序,并删除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`

1 个答案:

答案 0 :(得分:2)

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

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

在你的php.ini中:

memory_limit=32M