我曾经使用
mysql_query获取大量的数据,然后逐个迭代结果来处理数据.例如:
$MysqL_result = MysqL_query("select * from user"); while($row = MysqL_fetch_array($MysqL_result)){ echo $row['email'] . "\n"; }
最近我看了几个框架,并意识到他们将所有数据读取到内存中的数组并返回数组.
$large_array = $db->fetchAll("select * from user"); foreach($large_array as $user){ echo $user['email'] . "\n"; }
我想知道每种方法的利弊.在我看来,加载内存中的所有内容都是灾难的秘诀,如果你有一个很长的项目列表.但是再一次,同事告诉我,MysqL驱动程序不得不将结果集放在内存中.我想得到一个明白问题是关于表演的人的意见.请不要对代码发表评论,我只是作为这个帖子的例子.
谢谢
的确,MysqL库“通常”会获取客户端内存中的所有数据.它通常使用
mysql_store_result()
这样做.您可以使用LIMIT关键字分解上面的过大查询,但是由于可能会在其间进行更改,因此数据不一致的风险.你可以关心这个使用锁.
另一种方法可能是使用mysql_use_result()
,它在服务器端使用更多的资源,并且需要尽快完成提取作业.