PHP: как результаты запроса хранятся в mysqli_result
Когда я сделал запрос к базе данных и получил результаты в 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. Итак, где же результаты хранятся в памяти.