我正在處理一個數據庫,其中行數在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