Skip to content

Instantly share code, notes, and snippets.

@ktat
Created January 5, 2012 16:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ktat/1566118 to your computer and use it in GitHub Desktop.
Save ktat/1566118 to your computer and use it in GitHub Desktop.
Benchmark of Query Builder
#!/usr/bin/perl
use strict;
use warnings;
use SQL::Maker;
use SQL::Abstract;
use SQL::Abstract::More;
use Benchmark qw/cmpthese/;
my $sql_abstract_more = new SQL::Abstract::More();
my $sql_abstract = new SQL::Abstract();
cmpthese(0,
{
sql_maker => \&sql_maker,
# sql_abstract => \&sql_abstract,
# sql_abstract_more => \&sql_abstract_more,
sql_abstract => \&sql_abstract_prepared,
sql_abstract_more => \&sql_abstract_more_prepared,
});
sub sql_maker {
my $q = SQL::Maker::Select->new(driver => 'mysql');
my $c1 = SQL::Maker::Condition->new;
$c1->add(hoge => 1);
my $c2 = SQL::Maker::Condition->new;
$c2->add(fuga => 2);
my $c3 = SQL::Maker::Condition->new;
$c3->add(xxx => 2);
$q->add_from('hoge')->set_where(($c1 | $c2) & $c3)->add_select('id');
my $s = $q->as_sql;
my @binds = $q->bind;
}
sub sql_abstract {
my $sql = new SQL::Abstract;
my ($s, @binds) =$sql->select('hoge', ['id'], {-or => [{hoge => 1}, {fuga => 2}], xxx => 2});
}
sub sql_abstract_prepared {
my ($s, @binds) = $sql_abstract->select('hoge', ['id'], {-or => [{hoge => 1}, {fuga => 2}], xxx => 2});
}
sub sql_abstract_more {
my $sql = new SQL::Abstract::More;
my ($s, @binds) =$sql->select(-from => 'hoge', -columns => ['id'], -where => {-or => [{hoge => 1}, {fuga => 2}], xxx => 2});
}
sub sql_abstract_more_prepared {
my ($s, @binds) =$sql_abstract_more->select(-from => 'hoge', -columns => ['id'], -where => {-or => [{hoge => 1}, {fuga => 2}], xxx => 2});
}
__END__
Rate sql_abstract_more sql_abstract sql_maker
sql_abstract_more 2692/s -- -21% -64%
sql_abstract 3422/s 27% -- -55%
sql_maker 7566/s 181% 121% --
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment