Toby Corkindale wrote:
Jacob Bunk Nielsen wrote:
Hi

I have read an interesting blog post about how prepared statements in
PostgreSQL does not work well with LIKE searches. It can be found at:
http://blog.endpoint.com/2009/08/debugging-prepared-statements.html

I'm hit by this in several places in my code. I have an example where I
can go from ~290 ms to 0.5 ms for a single query, so quite a significant
improvement, that I'd like to benefit from.

Of course I'm using DBIx::Class, so my question is how do I turn off
prepared statements for LIKE searches?

I think I'd like to be able to turn off prepared statements everywhere I
use LIKE. If that is not what I want, please tell me why :-)

Can anyone give my a clue as to how I would go about not using prepared
statements for LIKE searches and still staying with DBIx::Class?

I believe you should just be able to pass the relevant connect options, ie:

my $dbh = DBI->connect(
    'dbi:Pg:dbname=myDatabase', $user, $passwd,
    { pg_server_prepare => 0 }
);

... however, that said, DBD::Pg doesn't force you to disable prepared statements across the whole connection, as generally that'll have a negative performance impact.

You can disable prepared statements on a per-query basis if you like, but I just don't know how to go about causing DBIx::Class to pass the relevant flags over.

If it's one one or two complex queries that you want to optimise, then you could do it with a custom ResultSource, or a ResultSet method, which acts on the raw $dbh to build a query instead.
Have a look at the DBIx::Class::Manual::Cookbook for more info on those.

Cheers,
Toby

_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[email protected]

Reply via email to