[Php] Wie man PDO (pdo_pgsql) macht, um Zeilen faul zu holen


Answers

Question

Mit dem folgenden Code, obwohl ich eine einzelne Zeile abrufe, wird der gesamte Datensatz heruntergeladen (was einige Sekunden dauert):

$query = 'SELECT * FROM xxx WHERE id > :position ORDER BY id';
$stmt = $db->prepare($query);

$stmt->execute([
    ':position' => $position,
]);

while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
    break;
}

Ich habe versucht, eine Option in PDO zu finden, die es veranlassen würde, Zeilen auf Anforderung (oder durch vernünftige Stapel) zu holen, aber es versäumte es, zumindest konnte ich es in der PDO-Dokumentation nicht finden.

Postgresql für die angegebene Abfrage kann die erste Zeile in 0.28ms EXPLAIN ANALYZE .

Und mein Ziel ist es, Zeilen so schnell wie möglich zu bearbeiten, auch wenn weitere Stapel von Zeilen mit etwas Netzwerk-Overhead kommen.

Wie ich festgestellt habe, dass es alle Zeilen abruft:

  1. Indirekt: Es dauert die gleiche Zeit, break nach der ersten Zeile zu break oder über den gesamten Datensatz zu iterieren
  2. Ich habe den Verkehr mit tcpdump erfasst und überprüft, dass alle Zeilen abgerufen werden.

Die Frage ist also: Ist es möglich, PDO so zu machen, dass es im Bedarfsfall reihenweise (oder einige vernünftige kleine Chargen) abruft?