The benchmark code is at the end of this message. Binding a single value:
Rate bind1 exec1 bind1 4174/s -- -2% exec1 4247/s 2% -- Binding 10 values: Rate bind10 exec10 bind10 3234/s -- -13% exec10 3700/s 14% -- The hit doesn't look horrible, but the scaling factor scared me a bit so I ran it with 50 values. Rate bind50 exec50 bind50 2113/s -- -17% exec50 2541/s 20% -- Just for good measure, I threw in a (no-op) method call to simulate a tiny bit of the overhead that RDBO will incur when looking up the appropriate bind type. I did it for 10 and 50 bind values. Rate bind10t exec10t bind10t 3269/s -- -13% exec10t 3755/s 15% -- Rate bind50t exec50t bind50t 1849/s -- -25% exec50t 2472/s 34% -- I dunno, I'm still on the fence... -John --- use strict; use DBI; use Benchmark qw(cmpthese); my $dbh = DBI->connect('dbi:mysql:dbname=test', 'root'); my @bind1 = (123); my @bind10 = (1 .. 10); my @bind50 = (1 .. 50); cmpthese(-3, { exec1 => sub { my $sth = $dbh->prepare('SELECT * FROM photos WHERE id = ?'); $sth->execute(@bind1); $sth->finish; }, bind1 => sub { my $sth = $dbh->prepare('SELECT * FROM photos WHERE id = ?'); my $i = 1; foreach my $val (@bind1) { $sth->bind_param($i++, $val); } $sth->execute; $sth->finish; } }); cmpthese(-3, { exec10 => sub { my $sth = $dbh->prepare('SELECT * FROM photos WHERE id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ?'); $sth->execute(@bind10); $sth->finish; }, bind10 => sub { my $sth = $dbh->prepare('SELECT * FROM photos WHERE id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ?'); my $i = 1; foreach my $val (@bind10) { $sth->bind_param($i++, $val); } $sth->execute; $sth->finish; } }); cmpthese(-3, { exec50 => sub { my $sth = $dbh->prepare('SELECT * FROM photos WHERE id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ?'); $sth->execute(@bind50); $sth->finish; }, bind50 => sub { my $sth = $dbh->prepare('SELECT * FROM photos WHERE id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ?'); my $i = 1; foreach my $val (@bind50) { $sth->bind_param($i++, $val); } $sth->execute; $sth->finish; } }); sub Meta::get_type { } my $o = bless {}, 'Meta'; cmpthese(-3, { exec10t => sub { my $sth = $dbh->prepare('SELECT * FROM photos WHERE id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ?'); $sth->execute(@bind10); $sth->finish; }, bind10t => sub { my $sth = $dbh->prepare('SELECT * FROM photos WHERE id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ?'); my $i = 1; foreach my $val (@bind10) { $sth->bind_param($i++, $val, $o->get_type); } $sth->execute; $sth->finish; } }); cmpthese(-3, { exec50t => sub { my $sth = $dbh->prepare('SELECT * FROM photos WHERE id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ?'); $sth->execute(@bind50); $sth->finish; }, bind50t => sub { my $sth = $dbh->prepare('SELECT * FROM photos WHERE id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ? AND id != ?'); my $i = 1; foreach my $val (@bind50) { $sth->bind_param($i++, $val, $o->get_type); } $sth->execute; $sth->finish; } }); ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642 _______________________________________________ Rose-db-object mailing list Rose-db-object@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rose-db-object