Aktueller Standort: Startseite> Neueste Artikel> MySQLI_Result :: Fetch_Column wird zur Speicheroptimierung beim Extrahieren einzelner Spaltendaten verwendet

MySQLI_Result :: Fetch_Column wird zur Speicheroptimierung beim Extrahieren einzelner Spaltendaten verwendet

gitbox 2025-05-29

Bei der Verarbeitung der Datenbankabfrage führt zu PHP. Wenn wir nur an einer Spalte im Ergebnissatz interessiert sind, ist die Verwendung von MySQLI_Result :: fetch_column () eine sehr effiziente Art und Weise. Dieser Ansatz ist speichersparender als herkömmlich fetch_assoc () oder fetch_row () , insbesondere bei der Behandlung großer Datenmengen. In diesem Artikel wird untersucht, wie die Speicherverwendung während der Verwendung von Fetch_Column () weiter optimiert werden kann, um die Gesamtleistung von PHP -Programmen zu verbessern.

1. Begrenzen Sie die Anzahl der Spalten im Abfrageergebnis

Eine der direktesten und effizientesten Möglichkeiten, den Speicher zu optimieren, besteht darin, nur die Spalte auszuwählen, die Sie in SQL -Abfragen tatsächlich benötigen, anstatt Select * zu verwenden. Zum Beispiel:

 $result = $mysqli->query("SELECT username FROM users");

Dies kann die vom Datenbankserver übertragene Datenmenge auf PHP reduzieren und den Speicherverbrauch von der Quelle verringern.

2. Verwenden Sie fetch_column () anstelle von fetch_assoc () oder fetch_row ()

fetch_assoc () gibt ein assoziatives Array zurück, fetch_row () gibt ein Indexarray zurück und fetch_column () direkt einen einzelnen Wert zurückgibt:

 while ($username = $result->fetch_column()) {
    // bewältigen$username
}

Diese Methode vermeidet unnötige Array -Kapselung und reduziert die Speicherzuweisung, insbesondere für Szenarien, in denen nur eine bestimmte Datenspalte erforderlich ist.

3. Vermeiden Sie alle Daten in Arrays,

Eine übliche Praxis besteht darin, zuerst alle Ergebnisse in ein Array zu leiten und dann zu verarbeiten:

 $usernames = [];
while ($username = $result->fetch_column()) {
    $usernames[] = $username;
}

Wenn das Datenvolumen groß ist, kann dies zu einer großen Menge an Speicherverbrauch führen. Wenn die Verarbeitungslogik dies zulässt, versuchen Sie es beim Lesen zu lesen und zu verarbeiten, anstatt alle Daten gleichzeitig zu laden:

 while ($username = $result->fetch_column()) {
    process_username($username); // 假设是某个bewältigen函数
}

V.

Standardmäßig zwischen MySQLI_Query () richtet alle Ergebnisse im Client -Speicher vor. Wenn das Datenvolumen besonders groß ist, können Sie die Konstante MySQLI_USE_RESULT verwenden, um nicht gepufferte Abfragen zu ermöglichen:

 $result = $mysqli->query("SELECT username FROM users", MYSQLI_USE_RESULT);

Diese Methode lädt nicht alle Ergebnisse in den Speicher, sondern erhält jeweils eine Datenzeile vom Server und speichert mehr Speicher. Es ist jedoch zu beachten, dass nicht gepufferte Ergebnissätze andere Abfragen vor der Verarbeitung nicht ausführen können.

5. Konfigurieren Sie die PHP -Speichergrenze rational

Wenn Ihr PHP-Skript selbst Hochlastaufgaben ausführt (z. B. große Mengen an Datenextraktion), stellen Sie sicher, dass das Memory_Limit in Ihrem PHP.ini vernünftigerweise eingestellt ist, um den Überlauf des Speicher zu verhindern und nicht zu hoch und nicht zu hoch und abfallsystemressourcen einzustellen. Es kann dynamisch durch die folgenden Methoden festgelegt werden:

 ini_set('memory_limit', '128M');

Es ist jedoch besser, die Programmlogik zu optimieren, als nur die Speicherkappen zu erhöhen.

6. Verwenden Sie den Generator, um den Speicherverbrauch weiter zu reduzieren

Für Funktionen, die mehrere Spaltenwerte zurückgeben müssen, kann der Generator mit dem Effekt einer verzögerten Belastung kombiniert werden:

 function get_usernames(mysqli_result $result): Generator {
    while ($username = $result->fetch_column()) {
        yield $username;
    }
}

// verwenden
foreach (get_usernames($result) as $username) {
    process_username($username);
}

Der Vorteil des Generators besteht darin, dass nicht alle Daten gleichzeitig in den Speicher geladen werden, was besonders für den Umgang mit großen Ergebnissätzen geeignet ist.

Zusammenfassung

Die Verwendung von MySQLI_Result :: fetch_column () selbst ist eine Speicheroptimierungspraxis, in Kombination mit anderen Techniken wie dem Abfragen nur der erforderlichen Felder, der Extraktion von Daten während der Verarbeitung und der Verwendung von nicht gepufferten Abfragen und Generatoren kann der Speicherverbrauch von PHP-Programmen weiter reduziert und die Leistung verbessert werden. Diese Optimierungsmethoden sind besonders wichtig für die Verarbeitungsszenarien mit großen Datenvolumina.

Weitere praktische Erfahrungen mit Hochleistungs-PHP-Interaktion mit Datenbanken finden Sie unter: https://gitbox.net/php-db-optimization