Con questo codice, anche se vado a prendere una singola riga - l'intero set di dati viene scaricato (che richiede pochi secondi):Come fare DOP (pdo_pgsql) per andare a prendere pigramente le righe
$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;
}
ho cercato di trovare un opzione in PDO che renderebbe il recupero di righe su richiesta (o per lotti ragionevoli), ma non è riuscito a farlo, almeno non ho potuto trovarlo nella documentazione PDO.
Postgresql per la query fornita è in grado di servire la prima riga in 0.28ms
come da EXPLAIN ANALYZE
.
E il mio obiettivo è quello di iniziare l'elaborazione delle righe il più velocemente possibile, anche se verranno aggiunti ulteriori lotti di righe con un sovraccarico di rete.
Come Decisi che recupera tutte le righe:
- Indirettamente: ci vuole tempo stesso
break
dopo la prima riga o per scorrere su tutta dataset - ho catturato il traffico con
tcpdump
e controllato che recupera tutte le righe.
Quindi, la domanda è: è possibile fare PDO
per andare a prendere in una riga per riga (o alcuni piccoli lotti ragionevoli) sulle modalità di richiesta?
io sono sicuro, ma hai visto questo (flag PDO :: FETCH_LAZY): http://stackoverflow.com/qu estions/14462156/php-pdofetch-lazy-not-creation-object-variable-names-as-they-are-access e da PHP doc: http://php.net/manual/en/pdostatement.fetch.php – pah
@threadp 'FETCH_LAZY' è un nome fuorviante, non fa quello che sembra dovrebbe :-D – zerkms
Esatto, ho appena ricevuto quello dalla tua risposta :) grazie – pah