行数が1,000,000を超えるデータベースで作業しています。select ステートメントはありますが、最初から fetchall を実行すると、すぐにメモリが不足してしまいます。ここに私の2つの質問があります:
開始するデータベースの正確なサイズがわからないため、fetchall を実行せずにデータベースのサイズを確認する方法はありますか? コンピュータは文字通りそれをサポートできません。
各行ごとに個別の fetchrow を実行する代わりに、一度に 5,000 など、データベースの特定のチャンクをフェッチする方法はありますか? 私はテストの実行を終えたばかりで、行ごとに実行すると、1000行あたりほぼ4分かかるように見えます.完了までにほぼ3日かかるプログラムを上司は好意的に見ていません.
これは私のコードです:
while ($i < $rows)
{
if ($i + $chunkRows < $rows)
{
for ($j = 0; $j < $chunkRows; $j++)
{
@array = $sth->fetchrow();
($nameOne, $numberOne, $numberTwo) = someFunction($lineCount,@array,$nameOne,$numberOne, $numberTwo);
}
}
else #run for loop for j < rows % chunkrows
$i = $i + $j
}