in reply to dbi: moving big data among databases (prepared statements)
It is my understanding that the purpose of preparing the statement is to reduce the work you are done each iteration. As written, you are preparing the statement each time, which will add a little time to each pass. Perhaps a better way to do this would be:
# Recommend not using '*' but specifying the field names, # to future-proof code. my $query1 = "SELECT * FROM database1.table WHERE ( id = ? );"; my $query2 = "INSERT INTO database2.table ( value1, value2 ) VALUES ( ?, ? ) ;"; my $sth1 = $dbh1->prepare( $query1 ) or die $dbh1->errstr; my $sth2 = $dbh2->prepare( $query2 ) or die $dbh2->errstr; foreach my $id ( @big_data_arrray ) { # Original code had an error # $sth2->execute was called in both cases $sth1->execute( $id ) or die $dbh1->errstr; while ( my @row = $sth1->fetchrow_array ) { $sth2->execute( @row[0 .. 1] ) or die $dbh2->errstr; } $sth1->finish; }
Instead of performing 2*N (N=number of items in @big_data_array) prepare calls, only 2 prepare calls are used.
Hope that helps.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: dbi: moving big data among databases (prepared statements)
by Anonymous Monk on Jun 16, 2018 at 19:00 UTC |