PHP: jak są przechowywane wyniki zapytania w mysqli_result

Kiedy wykonałem zapytanie do bazy danych i pobrałem wyniki w mysqli_result, użycie pamięci jest bardzo małe. Jednak, gdy pobieram wszystkie wiersze w wynikach zapytania do tablicy asocjacyjnej, użycie pamięci staje się bardzo wysokie.

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

Ma dla mnie sens, że przechowywanie wielu wyników jest bardzo pochłaniające pamięć, ale zastanawiam się, jak to możliwe, że mysqli_result jest tak mały. Nie może być tak, że wyniki są odpytywane do bazy danych za każdym razem, gdy wywoływana jest funkcja fetch_assoc. Więc gdzie są przechowywane wyniki w pamięci.

questionAnswers(2)

yourAnswerToTheQuestion