PHP: Wie werden Abfrageergebnisse in mysqli_result gespeichert?

8

Wenn ich eine Abfrage an die Datenbank anlegte und die Ergebnisse in mysqli_result abrief, ist die Speicherbelegung extrem gering. Wenn ich jedoch alle Zeilen in den Abfrageergebnissen in einem assoziativen Array abrufe, wird die Speichernutzung extrem hoch.

%Vor%

Es macht für mich Sinn, dass das Speichern dieser vielen Ergebnisse sehr speicherintensiv ist, aber ich frage mich nur, wie kommt es, dass mysqli_result so klein ist. Es kann nicht sein, dass die Ergebnisse bei jedem Aufruf von fetch_assoc an die dbase abgefragt werden. Also, wo sind die Ergebnisse im Speicher gespeichert?

    
spchuang 29.07.2012, 03:20
quelle

2 Antworten

2

Es gibt einen RIESIGEN Unterschied zwischen dem Abrufen von Ergebnissen und dem Speichern eines Zeigers auf eine Ressource.

Wenn Sie echo $r; vor dem ersten Aufruf von memory_get_usage(); verwenden, werden Sie feststellen, dass es sich nur um einen Zeiger handelt. Dies ist der Zeiger auf Ihre Ergebnismenge. Bis Sie fetch Ihre Ergebnisse haben, wird die Ergebnismenge nicht gespeichert.

Ich würde vorschlagen, dass Sie fetchAll() für das ausführen, was Sie versuchen. Dies führt dann dazu, dass eine Methode auf alle Ihre Ergebnisse mit besserer Leistung zugreift, da sie auf der mysqli-Erweiterung (C-Bibliothek) verpfändet ist und nicht auf einer Schleife in PHP.

Sie können auch die freie Ergebnisfunktion verwenden, um Ihre Ergebnisse aus dem Speicher zu löschen, wenn Sie damit fertig sind. Das ist wie das Schließen eines Cursors in Java, wenn Sie damit vertraut sind.

    
Mike Mackintosh 29.07.2012, 04:30
quelle
1

Ich denke, du solltest das stattdessen:

%Vor%

Die Art, wie Sie gepostet haben, sammelt ein riesiges Array in $rows , und die Speichernutzung spiegelt das wider.

    
Niloct 29.07.2012 03:34
quelle

Tags und Links