我正在研究一个数据库,其中行数高于 1,000,000。我有我的选择语句,但如果我开始使用 fetchall,我很快就会耗尽内存。这是我的2个问题:
由于我不知道要启动的数据库的确切大小,有没有办法在不执行 fetchall 的情况下找出数据库的大小?计算机实际上无法支持它。
有没有什么办法可以提取数据库的某个块,可能一次处理 5,000 个,而不是为每一行做一个单独的 fetchrow?我刚刚完成了一个测试,并且逐行进行,它看起来每 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
}