MySQL_Fetch_array verwendet MySQL -Datenbanken, um MySQL -Datenbanken zu manipulieren, und ist eine häufig verwendete Funktion, um Datenzeile für Zeile aus dem Abfrageergebnissatz abzurufen. Wenn die Ergebnismenge sehr groß ist, kann die Verwendung von MySQL_Fetch_array direkt zu Performance -Engpässen, hohem Speicherpfunddruck und sogar langsamer Seitenreaktion führen. In diesem Artikel werden spezifische Code -Beispiele kombiniert, um zu beschreiben, wie die Leistung effizient verarbeitet und die Leistung optimiert wird, wenn lange Ergebnissätze zurückgegeben werden.
MySQL_Fetch_array soll Daten aus der Ergebnis -Set -Zeile nach Zeile abrufen. Obwohl es vermeidet, dass alle Daten gleichzeitig in den Speicher gelangen, wird das Abfrageergebnis selbst zu groß, aber dennoch eine große Menge an Ressourcen belegt.
Optimierungsideen :
Paginierungsabfrage und begrenzte die Datenmenge, die in einer einzigen Zeit zurückgegeben wurden
Verwenden Sie die Cursor -Abfrage, um Daten Schritt für Schritt zu verarbeiten
Paging ist eine gemeinsame Methode zur Verarbeitung langer Ergebnissätze. Durch Limit und Offset wird die Anzahl der Datenstreifen jedes Mal gesteuert, um Speicherxplosionen zu vermeiden.
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
$limit = 100; // Anzahl der Balken pro Seite
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$offset = ($page - 1) * $limit;
$sql = "SELECT * FROM large_table LIMIT $limit OFFSET $offset";
$result = $mysqli->query($sql);
while ($row = mysql_fetch_array($result)) {
// Verarbeiten Sie jede Datenreihe
print_r($row);
}
?>
Dadurch wird die Daten in kleinere Stücke aufgeteilt und in Stapeln verarbeitet, wodurch der Serverdruck reduziert wird.
Die MySQL_* -Serie -Funktionen wurden seit Php 5.5 aufgegeben. Es wird empfohlen, MySQLI oder PDO zu verwenden. Sie funktionieren besser und unterstützen Vorverarbeitungsaussagen.
Zum Beispiel unter Verwendung von mySQLI_Fetch_array :
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
$sql = "SELECT * FROM large_table";
$result = $mysqli->query($sql);
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
// Verarbeiten Sie jede Datenreihe
print_r($row);
}
?>
Vermeiden Sie Auswahl * , fragen Sie nur die Felder, die wirklich benötigt werden, und reduzieren die Datenübertragung und den Speicherverbrauch.
$sql = "SELECT id, name, email FROM large_table LIMIT 100";
Stellen Sie sicher, dass die Felder der Abfragebedingungen einen geeigneten Index aufweisen, das scannende Tischverfahren vermeiden und die Abfragegeschwindigkeit verbessern.
CREATE INDEX idx_name ON large_table(name);
Wenn die Datenbank sie unterstützt, können Sie Cursors oder gespeicherte Prozeduren verwenden, um Daten einzeln auf der Datenbankseite zu verarbeiten, um die Speicherverwendung auf der PHP -Seite zu reduzieren.
Für Skripte, die große Datenmengen verarbeiten müssen, können Speicherbegrenzungen und Ausführungszeiten vorübergehend erhöht werden, dies ist jedoch nur eine Reliefmethode, keine grundlegende Lösung.
ini_set('memory_limit', '512M');
set_time_limit(300);
Vermeiden Sie es, alle Daten gleichzeitig zu laden und die Paging- oder Stapelverarbeitung zu priorisieren
Ersetzen Sie die verlassene MySQL_* -Funktion durch MySQLI oder PDO
Wählen Sie während der Abfrage nur die erforderlichen Felder aus, um die Auswahl * zu vermeiden *
Stellen Sie sicher
Reduzieren Sie den PHP-Seitendruck mithilfe serverseitiger Cursor oder gespeicherten Verfahren
Passen Sie die PHP -Konfiguration rational als zusätzliche Optimierungsmaß an
Durch die oben genannten Methoden können die Leistung und Effizienz der Verwendung von MySQL_Fetch_array zur Verarbeitung langer Ergebnissätze erheblich verbessert werden.