我有一个需要大量时间的 perl 程序。有人可以建议调整选项。
要求
Perl 程序在数据库检索后进行一些文件处理,并根据数据库中存在的值进行进一步处理。所以逻辑是
my $sql="select KEY,VALUE from TABLEA";
my $sth = $dbh->prepare($sql);
$sth->execute;
while ( my @row = $sth->fetchrow_array( ) ) {
$tagdata{@row[0]} = @row[1];
}
TABLEA 包含 300 万行。现在在 perl 程序中经过这么多文件处理后,我需要找到给定值的键。键是唯一的,但值不是。
所以key是通过以下逻辑找出来的。
my @keysfind = grep { $tagdata{$_} eq $value } keys %tagdata;
foreach (@keysfind)
{
并根据@keysfind
处理完成。这个过程需要大量时间,因为这个(找到密钥)循环运行(10 万次)。
我尝试的选项是
1) 使用 fetchall_hashref
而不是fetchrow_array
. 虽然它快一点,但并不多。
2)而不是散列,将所有这些操作移到数据库中,即根据值获取键,但问题是这个值获取循环运行了 10 万次,这意味着尽管查询很简单,但它会有这些数量的数据库调用。
任何人都可以提出更好的方法来处理这个问题。