我在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`
答案 0 :(得分:2)
PHP也使用内存来执行查询。因此,从PHP应用程序执行查询确实会使用比直接从MySQL执行它们更多的内存。
我做了一个简单的计算,33554432字节输出到32MB。所以我建议修改你的php.ini设置。这应该让你输出数据,然后你可以调整你的SQL。
在你的php.ini中:
memory_limit=32M