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.
>
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 |