PHP: Wie werden Abfrageergebnisse in mysqli_result gespeichert?
Wenn ich eine Abfrage an die Datenbank gestellt und die Ergebnisse in mysqli_result abgerufen habe, ist die Speichernutzung extrem gering. Wenn ich jedoch alle Zeilen in der Abfrage abrufe, entsteht ein assoziatives Array, und die Speichernutzung ist extrem hoch.
<?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
?>
Es macht für mich Sinn, dass das Speichern dieser vielen Ergebnisse sehr speicherintensiv ist, aber ich frage mich nur, warum mysqli_result so klein ist. Es kann nicht sein, dass die Ergebnisse bei jedem Aufruf von fetch_assoc an die Datenbank gesendet werden. Wo werden dann die Ergebnisse gespeichert?