Thread: 8.2 planner and "like"

8.2 planner and "like"

From
"Angva"
Date:
Hello,

I have a question regarding Postgres 8.2 and the planner.

Our company's application runs searches with "like" where clauses, for
example: "where id like '38F20A%'". This query once ran in under 10 ms,
but since upgrading from 8.1.3 to 8.2.0, it now takes about 500 ms to
run. The problem appears to be that the planner does not want to use an
index since the upgrade, for "like" queries.

We experimented with planner cost constants, and we even tried setting
enable_seqscan to false. A seq scan was done every time. Now if my
understanding is correct, setting enable_seqscan to false should tell
the planner never to use a seq scan unless no alternative is possible.
We made sure the relevant index still exists, of course, and that the
table was analyzed with good samples...

Could this be a bug, or am I the problem? :) Any advice or insight is
appreciated.

Thank you,
Mark


Re: 8.2 planner and "like"

From
Tom Lane
Date:
"Angva" <angvaw@gmail.com> writes:
> Our company's application runs searches with "like" where clauses, for
> example: "where id like '38F20A%'". This query once ran in under 10 ms,
> but since upgrading from 8.1.3 to 8.2.0, it now takes about 500 ms to
> run. The problem appears to be that the planner does not want to use an
> index since the upgrade, for "like" queries.

> We experimented with planner cost constants, and we even tried setting
> enable_seqscan to false. A seq scan was done every time.

If it won't do it even with seqscan off, then it can't, which most
likely means that you mistakenly picked a non-C locale for the new
installation.  You can either fix that (requiring re-initdb :-() or
provide a "pattern_ops" index that's not subject to locale oddities.
Non-C locales tend to impose a sort ordering that's not suited for
LIKE pattern matching.  See
http://www.postgresql.org/docs/8.2/static/indexes-opclass.html

            regards, tom lane

Re: 8.2 planner and "like"

From
"Angva"
Date:
Thanks so much for that info, Tom!

On Jan 29, 8:00 pm, t...@sss.pgh.pa.us (Tom Lane) wrote:
> "Angva" <ang...@gmail.com> writes:
> > Our company's application runs searches with "like" where clauses, for
> > example: "where id like '38F20A%'". This query once ran in under 10 ms,
> > but since upgrading from 8.1.3 to 8.2.0, it now takes about 500 ms to
> > run. The problem appears to be that the planner does not want to use an
> > index since the upgrade, for "like" queries.
> > We experimented with planner cost constants, and we even tried setting
> > enable_seqscan to false. A seq scan was done every time.
>
> If it won't do it even with seqscan off, then it can't, which most
> likely means that you mistakenly picked a non-C locale for the new
> installation.  You can either fix that (requiring re-initdb :-() or
> provide a "pattern_ops" index that's not subject to locale oddities.
> Non-C locales tend to impose a sort ordering that's not suited for
> LIKE pattern matching.  Seehttp://www.postgresql.org/docs/8.2/static/indexes-opclass.html
>
>                         regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: Have you checked our extensive FAQ?
>
>                http://www.postgresql.org/docs/faq