Re: Index scan with like expressions

From: Tonio Caputo <tonioc(at)exeo(dot)com(dot)ar>
To: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Index scan with like expressions
Date: 2007-07-18 17:19:31
Message-ID: 1184779171.7307.69.camel@heracles.melo
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Thanks heikki, for your quick and very precise answer.

I understood the problem soon after sending the e-mail, but
I didn't know nothing about the prepareThreshold=0 parameter.

thanks again
tonio

On Wed, 2007-07-18 at 09:41 +0100, Heikki Linnakangas wrote:
> Tonio Caputo wrote:
> > I'm having some trouble with index scan using like expressions, using
> > JDBC, but not in psql where the index is used.
> > ...
> > My query:
> > select beings_id from inscriptions
> > where code like '999999';
> > ...
> > If I do it from my java application explicitly writing my code value
> > in the sql-string I get the correct plan.
>
> Index can only be used for a LIKE expression if there's no % or _ in the
> beginning of the string. For example, "LIKE 'foobar'" and "LIKE 'foo%'"
> can use the index, looking for the string 'foobar', or anything that
> begins with 'foo'. But for expressions like "LIKE '%bar'", the index
> can't be used.
>
> If you use a parameter marker, "LIKE ?", the planner doesn't know if the
> string you're going to give as parameter is such that the index can be
> used, so it has no choice but choose a plan that works regardless of the
> parameter value, which is a seq scan in this case.
>
> You can use prepareThreshold=0 connection parameter to disable
> server-side prepared statements, so that the query is planned every time
> it's executed. That way the planner can check the parameter value each
> time, and use the index when possible.
>

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message Kris Jurka 2007-07-18 21:00:18 Re: jdbc supports struct?
Previous Message Ingmar Lötzsch 2007-07-18 15:42:30 IN clause with PreparedStatement