我使用简单的PHP查询来从数据库中获取行,表中有7000行以上,每当我获取所有行时,PHP都不起作用并且脚本死掉,但是当我将结果限制为6400时工作良好。 我应该注意MySQL或PHP有任何限制吗?如果有的话,我需要配置这些设置。 任何帮助都非常感谢。 请注意,我的PHP设置允许脚本执行时间为1800秒,内存使用量设置为512MB。
答案 0 :(得分:2)
为什么你需要那么多行?我很确定php死了,因为内存不足。
在控制台中运行您的查询,看看是否有超过7000行没有问题。如果它返回所有那里你可以确定它是PHP而不是你的数据库,我相信它是php。
无论你做什么,最好循环数据,也称为“分页”,并以例如100行的块读取它并处理它,0-100,100-200,200-300。 ..
答案 1 :(得分:1)
我看到你有2个解决方案:
1) @burzum 建议的那个。真的很好,虽然您必须根据您的服务器负载(如果它不是常数)凭经验建立最大大小。
mysql_unbuffered_query
确实有一些缺点,如:
mysql_unbuffered_query()
的好处是有代价的:您不能在mysql_num_rows()
返回的结果集上使用mysql_data_seek()
和mysql_unbuffered_query()
,直到获取所有行为止。您还必须从无缓冲的SQL查询中获取所有结果行,然后才能使用相同的link_identifier向MySQL发送新的SQL查询。
但是既然你正在处理大型数据集,那么它似乎是合理的......