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

Reply via email to