PHP: cómo se almacenan los resultados de las consultas en mysqli_result

Cuando hice una consulta a la base de datos y recuperé los resultados en mysqli_result, el uso de la memoria es extremadamente pequeño. Sin embargo, cuando obtengo todas las filas de los resultados de la consulta en una matriz asociativa, el uso de la memoria se vuelve extremadamente alto.

<?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
?>

Para mí tiene sentido que almacenar tantos resultados consuma mucha memoria, pero me pregunto por qué mysqli_result es tan pequeño. No puede ser que los resultados se consulten en la base de datos cada vez que se llama a fetch_assoc. Entonces, ¿dónde están los resultados almacenados en la memoria.

Respuestas a la pregunta(2)

Su respuesta a la pregunta