이 DBI prepare 문을 최적화하기 위해이 코드를 조정할 때 Perl 도움이 필요합니다. 나는 이것을 더 최적화 할 수 있다고 확신한다. 나는 내가이 연결을 제대로 가지고 있다고 생각 하나, 나는 한 번 쿼리를 파싱하고 유일하게 (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