PHP: como os resultados da consulta são armazenados no mysqli_result

Quando fiz uma consulta ao banco de dados e recuperei os resultados em mysqli_result, o uso da memória é extremamente pequeno. No entanto, quando busco todas as linhas nos resultados da consulta para um array associativo, o uso da memória se torna extremamente 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
?>

Faz sentido para mim que armazenar esses muitos resultados consuma muita memória, mas estou apenas imaginando como o mysqli_result é tão pequeno. Não pode ser que os resultados sejam consultados no dbase toda vez que fetch_assoc for chamado. Então, onde estão os resultados armazenados na memória?

questionAnswers(2)

yourAnswerToTheQuestion