我偶然发现了一些有关PHP的有趣内存 考虑这段代码(sql-result大约是18000行)
echo memory_get_usage() . PHP_EOL;
echo 'Querying mysql' . PHP_EOL;
$result = $wpdb->get_results($sql);
echo memory_get_usage() . PHP_EOL;
echo PHP_EOL;
echo 'Size of result set' . PHP_EOL;
echo strlen(serialize($result)) . PHP_EOL;
输出:
33309232
Querying mysql
86203976
Size of result set
6838278
为什么内存使用率如此高峰?这不是有点奇怪吗?
也许最重要的问题是,我可以采取哪些措施来降低使用率?
答案 0 :(得分:0)
数据库的每一行都打包成一个对象/哈希,每个值都有一个哈希键和值本身,所以这会产生很多开销。
您可以采取哪些措施来减少开销:
1)一定要只选择你真正需要的列,不要只做select *
2)get_results()
有第二个参数,用于控制你得到的东西。如果使用ARRAY_N
,则将结果作为数组数组得到,这应该具有最小的开销。
3)如果这还不够,则需要批量获取数据,例如1000行。
您可以使用sql修饰符offset
和limit
来实现此目的。
答案 1 :(得分:0)
只有使用xdebug进行基本分析才能确定实际的内存使用情况。
如果没有分析,并且大胆猜测,您有多种选择:
$wpdb->get_results($sql, ARRAY_N)
的输出格式,更轻松,更紧凑的格式 奖金(正如Meier所说):检查您是否需要SELECT子句中的每个字段,而不是select *
希望这有帮助!