Heim >Datenbank >MySQL-Tutorial >PDO::fetchAll() vs. PDO::fetch() in einer Schleife: Was ist effizienter für große Datensätze?
Bei Szenarien, in denen große Ergebnismengen abgerufen werden, stellt sich häufig die Frage: Welche Methode erweist sich als effizienter – PDO::fetchAll() oder PDO::fetch() in einer Schleife?
Unsere anfängliche Annahme deutet darauf hin, dass PDO::fetchAll() aufgrund der Fähigkeit von PDO, mehrere Datenbankoperationen gleichzeitig auszuführen, im Gegensatz zu mysql_query() von MySQL, das jeweils eine Operation verarbeitet, eine herausragende Geschwindigkeit erzielen könnte. Allerdings schweigt sich die PDO-Dokumentation zu diesem Aspekt aus und die Annahmen reichen nicht aus.
Um diese Frage zu klären, haben wir einen Benchmark mit einem Datensatz von 200.000 Datensätzen durchgeführt. Die Ergebnisse bestätigen, dass PDO::fetchAll() tatsächlich eine schnellere Leistung bietet:
fetchAll : 0.35965991020203s, 100249408b fetch : 0.39197015762329s, 440b
Dieser Leistungsgewinn hat jedoch seinen Preis. PDO::fetchAll() benötigt deutlich mehr Speicher als PDO::fetch() in einer Schleife.
Um den Benchmark zu replizieren, können Sie den folgenden Code verwenden:
$dbh = new PDO('mysql:dbname=testage;dbhost=localhost', 'root', ''); $sql = 'SELECT * FROM test_table WHERE 1'; $stmt = $dbh->query($sql); // FetchAll benchmark $start_all = microtime(true); $data = $stmt->fetchAll(); $end_all = microtime(true); // Fetch loop benchmark $data = array(); $start_one = microtime(true); while($data = $stmt->fetch()){} $end_one = microtime(true);
Zusammenfassend lässt sich sagen, dass PDO::fetchAll() bei der Arbeit mit großen Ergebnismengen einen Leistungsvorteil gegenüber bietet PDO::fetch() in einer Schleife. Diese Verbesserung wird jedoch durch den erhöhten Speicherverbrauch von PDO::fetchAll() ausgeglichen. Daher hängt die ideale Wahl von den spezifischen Anforderungen Ihrer Anwendung ab, wobei Geschwindigkeit und Speichernutzung in Einklang gebracht werden müssen.
Das obige ist der detaillierte Inhalt vonPDO::fetchAll() vs. PDO::fetch() in einer Schleife: Was ist effizienter für große Datensätze?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!