Aktueller Standort: Startseite> Neueste Artikel> Wie kann ich die Leistung effizient verarbeiten und optimieren, wenn mysql_fetch_array ein langes Ergebnissatz zurückgibt?

Wie kann ich die Leistung effizient verarbeiten und optimieren, wenn mysql_fetch_array ein langes Ergebnissatz zurückgibt?

gitbox 2025-08-28

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.


1. Vermeiden Sie es, alle Daten gleichzeitig zu laden

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


2. Verwenden Sie Pagination -Abfragen, um Stapel 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.


3. Verwenden Sie effizientere Datenbankschnittstellen - mysqli oder pdo

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);
}
?>

4. Reduzieren Sie die Menge an Abfragedaten und fragen Sie nur die erforderlichen Felder ab

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";

5. Verwenden Sie die Indexoptimierungsabfrage

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);

6. Verwenden Sie serverseitige Cursoren (gespeicherte Prozeduren oder verzögerte Abfragen).

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.


7. Erhöhen Sie angemessen die PHP -Speichergrenze und die Skriptausführungszeit

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);

Zusammenfassen

  • 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.