sql >> Databasteknik >  >> RDS >> Mysql

Ta tag i 190 000 rader från MySQL med PHP, tom sida? Minne eller buffert?

Lägger du Kohana åt sidan, eftersom jag aldrig har använt det, vad du gör just nu är i princip detta:

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

d.v.s. du får all data från MySQL med mysql_fetch_assoc och lagra dem alla i PHPs minne genom att trycka in det i $data . Det betyder att PHP måste ha tillräckligt med minne för att lagra all data på en gång, vilket det inte har.

Vad du vill göra är att hämta en resultatrad från MySQL, göra något med den och sedan gå vidare till nästa rad utan att lagra allt i minnet på en gång:

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

Och nej, använd inte det föråldrade mysql_ API:et, det är bara det största exemplet på den gemensamma nämnaren här. Dessutom måste det finnas ett bättre sätt att göra vad du vill än att försöka hämta och mata ut 190 000 rader på en gång.



  1. Hur man lägger till 10 sekunder i current_timestamp SQL (Oracle)

  2. Ändra det aktuella antalet för ett Auto Increment-värde i MySQL?

  3. SQL-fråga som GROUP BY med OR-villkor

  4. PostgreSQL:förbättrar pg_dump, pg_restore prestanda