我需要一些Perl幫助來調整此代碼以優化此DBI prepare語句的使用。我相信我可以優化/提高速度。我想我已經有了這個設置正確的地方,我有一個連接,但我想確保我解析查詢一次,只替換唯一的(1)參數更改。我只是不知道如何安排。如何在準備好的語句中使用tablename佔位符?
我基本上採取表的列表和循環表作爲一個查詢的輸入。基本上,這是具有不同表名的相同查詢。
有人可以告訴我如何優化這個嗎?
這是我在進度代碼:
my @tbls = qx(mysql -u foo -pf00 --database $dbsrc -h $node --port 3306 -ss -e "show tables");
my $dbh = DBI->connect("DBI:mysql:database=$dbsrc;host=$node;port=3306",'foo','f00');
# Creating a logfile
open (MYLOG, ">$dmpdir$node-mytstdmp-$dt.log") || die "cannot append";
# Loop through each table and create its own data file
foreach my $tbls (@tbls)
{
chomp $tbls;
print MYLOG "START Time ==> ", &dt2, "\n";
extract_data($dbh, $tbls);
print MYLOG "TIME END ==> ", &dt2, "\n";
};
$dbh->disconnect;
close (MYLOG);
sub extract_data
{
my($dbh, $tbls) = @_;
my $out_file = "$dmpdir$node-$tbls.$dt.out";
open (my $gzip_fh, "| /bin/gzip -c > $out_file.gz") or die "error starting gzip $!";
print MYLOG "Creating dmp file ==> $out_file.gz\n";
my $sth = $dbh->prepare("SELECT UUID(), '$node', 1, 2, flg, upd, vts FROM $tbls");
$sth->execute();
while (my($uid, $hostnm,$1,$2,$flg,$upd,$vts) = $sth->fetchrow_array()) {
print $gzip_fh "_key_$uid^Ehost^A$hostnm^E1^A$1^E2^A$2^Eflg^A$flg^Eupd^A$upd^Evts^A$vts^D";
}
$sth->finish;
close $gzip_fh or die "Failed to close file: $!";
};
感謝您的意見。 – jdamae 2011-03-30 19:04:16