現在我有兩個散列哈希值,我通過解析一個日誌文件創建了1個哈希,我從SQL獲取了1個哈希。我需要比較它們以確定日誌文件中的記錄是否已經存在於數據庫中。現在我通過遍歷每個元素來比較它們:比較哈希散列的最佳方法是什麼?
foreach my $i(@record)
{
foreach my $a(@{$data})
{
if ($i->{port} eq $a->{port} and $i->{name} eq $a->{name})
{
print "match found $i->{name}, updating record in table\n";
}
else
{
print "no match found for $tableDate $i->{port} $i->{owner} $i->{name} adding record to table\n";
executeStatement("INSERT INTO client_usage (date, port, owner, name, emailed) VALUES (\'$tableDate\', \'$i->{port}\', \'$i->{owner}\', \'$i->{name}\', '0')");
}
}
}
當然,隨着數據庫變大,這需要很長時間才能運行。有沒有更有效的方法來做到這一點?我可以直接比較密鑰嗎?
這樣的聲音應該在SQL中解決,而不是perl。當然,有一種方法可以在SQL中「更新或插入」? – TLP 2012-01-09 16:36:51