2014-10-16 5 views
0

В таблице sql есть 100 записей, используя хеш с ключами. Я могу обрабатывать все записи успешно и сгенерированный вывод. Возможно, в таблице sql могут быть миллионы записей .will все значения хранятся в хеше. без использования хэшей есть другой способ обработки всех записей.альтернативный метод для хэша в perl

my %summaryhash; 

my $Attrdaysql = qq{select PACKAGEID, STATUS, sum(NUMDAYSACTIVE) 
        from table 
        group by PACKAGEID,STATUS}; 

# Compile the statement. 
my $Attrdays_Query = $DB->prepare($Attrdaysql) or niceExit(1,$DB->errstr);  

# Execute the statement. 
$Attrdays_Query->execute() or niceExit(1,$DB->errstr);  

while(my ($packageId,$status,$attrdays) = $Attrdays_Query->fetchrow_array()) 
{ 
    my $sim; 
    $summaryhash{ SIM } = $sim; 
    $summaryhash{ $sim }{ $packageId }{ package_id } = $packageId; 

    if ($status eq "ACTIVE") 
    {   
     $summaryhash{ $sim }{ $packageId }{ activeDays } = $attrdays; 
    } 
    elsif ($status eq "SUSPEND") 
    { 
     $summaryhash{ $sim }{ $packageId }{ suspendDays } = $attrdays; 
    } 
} 
+2

Вопрос _why_ вы хранить все записи внутри хэш, и возможный ответ заключается в использовании запроса, который будет выполнять статистические вычисления внутри базы данных. –

+0

Потому что мне нужно показать все дни «Активные» и «Приостановить» на основе идентификатора PackageID. – user2992741

+1

Почему вы не упорядочиваете свой запрос до желаемого результата с помощью «order by» и вместо хранения всего в памяти печатаете/сохраняете/отправляете их по очереди? –

ответ

0

будет все хранить значения в хэш?

Да, поскольку это тестовая программа показывает, что это прекрасно, чтобы использовать хэши для миллионов ключей

time perl -e 'keys(%myhash)=13000000;for ('a'..'zzzzz') { $myhash{$_}++ }; print scalar keys %myhash;' 
Смежные вопросы