当我对数据库进行查询并在mysqli_result中检索结果时,内存使用量非常小。但是,当我将查询结果中的所有行提取到关联数组时,内存使用率变得非常高。PHP:如何将查询结果存储在mysqli_result中
<?php
require_once("../config.php"); //db connection config
$db = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DBASE);
$query ="select * from table_name";
if($r = $db->query($query)){
echo "MEMORY USAGE before : ". memory_get_usage()."<br><br>";
$rows = array();
while($row = $r->fetch_assoc()){
$rows[]= $row;
}
echo "MEMORY USAGE after : ". memory_get_usage()."<br><br>";
//before: 660880
//after: 114655768
// # of records: around 30 thousands
?>
这是有道理的,我认为这个存储许多成果是非常耗费内存,但我只是想知道如何来mysqli_result是如此之小。每次调用fetch_assoc时,都不能将结果查询到dbase。那么结果存储在内存的哪里呢?
我在某处读到'mysql_ *'函数一次从服务器获取所有结果行。然而,PDO(并可能是mysqli)按需检索每一行。所以每次打电话时,你都会用尽一点记忆。但是你将每一行存储在一个数组中,所以你的内存使用情况将会积累起来。 – 2012-07-29 03:29:45
你的意思是说,每次调用访存,mysqli都会查询数据库中的结果吗? – spchuang 2012-07-29 03:31:46
根据我的理解,当你调用query()时,MySQL执行查询并准备将所有结果行返回给PHP。但是,如果mysqli与PDO(至少是PDO的默认值)类似,那么在调用fetch之前它不会开始接收行。除非您调用'fetchAll()',否则每行将检索一行。这意味着你的内存使用情况是因为你将结果保存在一个数组中,而不是因为mysqli。 – 2012-07-29 03:34:31