Bei Verwendung von MySQL -Datenbanken in PHP müssen häufig Daten aus Abfrageergebnissen extrahiert werden. MySQLI_Result :: Fetch_assoc und Mysqli_Fetch_Row sind zwei häufig verwendete Möglichkeiten, um Abfragebedaten zu erhalten. Obwohl sie alle Abfrageergebnis -Sets zurückgeben können, unterscheiden sie sich in der Leistung, dem Rückgabewertformat und den anwendbaren Szenarien. In diesem Artikel werden wir die Leistungsunterschiede zwischen beiden untersuchen, ihre jeweiligen Merkmale analysieren und diskutieren, welche Methode bei der Abfrage großer Datenvolumina besser geeignet ist.
Mysqli_Result :: fetch_assoc :
Die Fetch_assoc -Methode gibt ein assoziatives Array zurück, wobei der Schlüssel des Arrays der Spaltenname ist und der Wert der Wert der entsprechenden Spalte ist. Dieser Ansatz ist normalerweise einfacher zu verstehen und zu verwenden, da er direkten Zugriff auf die resultierenden Daten über Spaltennamen ermöglicht.
Beispiel:
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">" - Name: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
}
</span></span>
MySQLI_Fetch_row :
Die Fetch_row -Methode gibt ein indiziertes Array numerischer Indizes zurück, dh die Spaltenwerte sind in numerischen Indizes in der Reihenfolge angeordnet, in der sie sich in den Abfrageergebnissen befinden. Diese Methode ist etwas effizienter als Fetch_assoc , da keine Assoziationen mit Spaltennamen erstellt werden müssen.
Beispiel:
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_row</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>] . </span><span><span class="hljs-string">" - Name: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
}
</span></span>
In Bezug auf die Leistung ist MySQLI_Fetch_row normalerweise speichersparender als mysqli_result :: fetch_assoc . Dies liegt daran, dass Fetch_row ein einfaches numerisches Indexarray zurückgibt, während Fetch_assoc ein assoziatives Array zurückgibt, für das mehr Speicher zum Speichern der Zuordnung von Spaltennamen auf Spaltenwerte gespeichert werden muss.
Insbesondere das von Fetch_assoc zurückgegebene Array enthält jedes Mal die Zeichenfolge der Spaltennamen, während Fetch_row nur den numerischen Index zurückgibt. Dies bedeutet, dass Fetch_row im Speicherverbrauch kostengünstiger ist, insbesondere wenn die Abfrageergebnisse eine große Anzahl von Spalten enthalten, ist die Lücke offensichtlicher.
In Bezug auf die Ausführungsgeschwindigkeit ist MySQLI_Fetch_row auch etwas besser als MySQLI_Result :: Fetch_assoc . Dies liegt daran, dass Fetch_assoc zusätzliche Zeit benötigt, um die Zuordnung von Spaltennamen auf Array -Tasten beim Erstellen von assoziativen Arrays zu verarbeiten. Fetch_row gibt die Spaltenwerte direkt in der Reihenfolge zurück, ohne zusätzliche Zuordnungsverarbeitung, sodass die Geschwindigkeit einen leichten Vorteil hat.
Natürlich ist dieser Leistungsunterschied möglicherweise nicht offensichtlich, wenn es um kleine Datensätze geht, aber wenn die Datenmenge sehr groß ist, sind die Vorteile von Fetch_row noch offensichtlicher, insbesondere wenn häufiger Betrieb großer Datenmengen erforderlich sind.
Einfach zu verstehen und zu warten : Das von Fetch_assoc zurückgegebene assoziative Array macht es intuitiver, auf Spaltendaten zuzugreifen. Die Spaltennamen sind die Schlüssel der Arrays, die für Entwickler sehr einfach zu verstehen und zu verwenden sind, insbesondere wenn es sich um komplexe Abfrageergebnisse handelt.
Szenarien, in denen Spaltennamen benötigt werden : Fetch_assoc ist besser geeignet, wenn es viele Spalten im Abfrageergebnis gibt und Entwickler über Spaltennamen anstelle von numerischen Indizes auf Daten zugreifen müssen. Insbesondere beim Lesen großer Datentabellen, die mehrere Spalten enthalten, können Daten schnell über Spaltennamen positioniert werden.
Hochleistungsbedingte Anforderungen : MySQLI_Fetch_row ist für Szenarien geeignet, in denen das Datenvolumen aufgrund des geringeren Speicherpfunddrucks und der höheren Ausführungseffizienz enorm ist. Insbesondere wenn Millionen von Datenzeilen verarbeitet werden müssen, kann Fetch_row die Speicherverwendung erheblich reduzieren und die Geschwindigkeit der Abfrageverarbeitung erhöhen.
Wenn der Spaltenindex festgelegt ist : Fetch_row ist prägnanter und effizienter, wenn der Entwickler die Spaltenreihenfolge der Abfrageergebnisse ermittelt hat und keine Spaltennamen verwenden muss.
Die Leistung wird zu einem entscheidenden Faktor bei großen Datenabfragen. Da MySQLI_Fetch_row mehr Vorteile für den Speicherausdruck und die Ausführungsgeschwindigkeit hat, ist dies in der Regel eine bessere Wahl für die Abfrage großer Datenvolumina, insbesondere in Szenarien, in denen nur Daten nacheinander zugegriffen werden müssen.
Wenn jedoch viele Spalten in Abfrage und Daten auf der Grundlage des Spaltennamens häufig zugegriffen werden müssen, obwohl MySQLi_Result :: Fetch_assoc in der Leistung geringfügig minderwertig ist, ist die Lesbarkeit und Wartung seines Codes immer noch ein Vorteil, der nicht ignoriert werden kann.
Leistungsvergleich : Mysqli_fetch_row ist normalerweise effizienter als MySQLI_Result :: Fetch_assoc , insbesondere wenn große Datenvolumina abfragen.
Anwendbare Szenarien : Mysqli_Result :: fetch_assoc eignet sich besser für Szenarien mit mehr Spaltennamenzugriff, und MySQLI_Fetch_Row eignet sich besser für große Datenabfrage, die eine effiziente Speicherverwendung und Leistungsoptimierung erfordert.
Empfehlung : Wenn die Leistung die erste Priorität hat und Sie nicht über Spaltennamen auf Daten zugreifen müssen, wird empfohlen, mySQLI_Fetch_row zu verwenden. Wenn Lesbarkeit und Entwicklungskomfort wichtiger sind und die Datenmenge relativ klein ist, wäre MySQLI_Result :: Fetch_assoc eine bessere Wahl.
Verwandte Tags:
mysqli_result