我正在处理一个数据库,其中行数在1,000,000以上。我有我的选择声明,但如果我首先尝试,我会很快耗尽内存。这里是我的2个问题:Perl DBI取数据库的一部分?
因为我不知道要启动的数据库的确切大小,有没有办法找出数据库的大小而不做使用fetchall?电脑从字面上不能支持它。
是否有任何方式来获取说某个数据库的块,可能一次处理5000个,而不是为每一行都做一个单独的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
}
我想拉回一排行,希望能够减少超过一百万个单独行上调用fetchRow的时间。 – ThePirateSheep 2010-08-05 19:00:50
你使用什么数据库?不同的数据库对这个问题会有不同的答案。 – 2010-08-05 19:17:19
我使用DBI,我看到的唯一提取是fetchRow()和fetchall的空构造函数。我正在寻找一个fetchRows(0,5000),其中0将作为开始的行,5000将是要获取的行数或沿着这些行的数据 – ThePirateSheep 2010-08-05 19:23:52