Mysql
 sql >> Database >  >> RDS >> Mysql

Afferrare 190.000 righe da MySQL usando PHP, pagina vuota? Memoria o buffer?

Mettendo da parte Kohana, perché non l'ho mai usato, quello che stai facendo attualmente è sostanzialmente questo:

$result = mysql_query(...);
$data   = array();
while ($row = mysql_fetch_assoc($result)) {
    $data[] = $row;
}

Cioè. stai ricevendo tutti i dati da MySQL con mysql_fetch_assoc e salvali tutti nella memoria di PHP inserendolo in $data . Ciò significa che PHP deve disporre di memoria sufficiente per archiviare tutti i dati contemporaneamente, cosa che non ha.

Quello che vuoi fare è recuperare una riga di risultati da MySQL, fare qualcosa con essa, quindi passare alla riga successiva senza archiviare tutto in memoria in una volta:

$result = mysql_query(...);
while ($row = mysql_fetch_assoc($result)) {
    echo $row['foo'];
}

E no, per favore non utilizzare l'API mysql_ deprecata, è solo il più grande esempio di denominatore comune qui. Inoltre, ci deve essere un modo migliore per fare tutto ciò che vuoi che provare a recuperare e generare 190.000 righe contemporaneamente.