我在 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/