Je travaille sur une base de données, où le nombre de lignes est supérieur à 1 000 000. J'ai ma déclaration select, mais si je commence par fetchall, je manque de mémoire rapidement. Voici mes 2 questions:Perl DBI extrait une partie de la base de données?
Depuis que je ne sais pas la taille exacte de la base de données pour commencer, est-il possible de connaître la taille de la base de données sans faire fetchall? L'ordinateur ne peut littéralement pas le supporter.
Existe-t-il un moyen d'extraire un certain segment de la base de données, peut-être 5 000 à traiter au lieu de faire un fetchrow individuel pour chaque ligne? Je viens juste de terminer un test, et de le faire ligne par ligne, ça fait presque 4 minutes par 1000 lignes travaillées, et le patron ne regarde pas favorablement sur un programme qui va prendre presque 3 jours à compléter.
Ceci est mon code:
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
}
Je veux retirer les lignes dans les paquets en espérant pouvoir réduire le temps perdu en appelant fetchRow sur plus d'un million de lignes individuelles. – ThePirateSheep
Quelle base de données utilisez-vous? Différentes bases de données auront des réponses différentes à cette question. –
J'utilise DBI, et les seules récupérations que je vois sont des constructeurs vides de fetchRow() et fetchall. Je cherche un fetchRows (0,5000) où 0 serait la ligne pour commencer, et 5000 serait le nombre de lignes à saisir ou quelque chose le long de ces lignes – ThePirateSheep