Disable prepared statements completely

Because of the way DBIx::Class does prepared statements, even
innocuous queries such

  $c->model('DB::Builds)->search({finished => 0})

can be extremely slow.  This is because DBIx::Class prepares a
PostgreSQL statement

  select ... from Builds where finished = ?

and since Builds is very large and there is a large fraction of rows
with "finished = 1", the PostgreSQL query planner decides to implement
this query with a sequential scan of the Builds table (despite the
existence of an index on "finished"), which is extremely slow.  It
would be nice if we could tell DBIx::Class that constants should be
part of the prepared statement, i.e.

  select ... from Builds where finished = 0

but AFAIK we can't.
This commit is contained in:
Eelco Dolstra
2012-03-12 19:42:59 +01:00
parent 2d1cf73974
commit abe71a767b
2 changed files with 9 additions and 10 deletions

View File

@ -6,7 +6,10 @@ use Hydra::Helper::Nix;
__PACKAGE__->config(
schema_class => 'Hydra::Schema',
connect_info => [getHydraDBPath],
connect_info => {
dsn => getHydraDBPath,
pg_server_prepare => 0,
},
);
=head1 NAME