| From: | Craig Ringer <craig(at)2ndquadrant(dot)com> |
|---|---|
| To: | Robert James <srobertjames(at)gmail(dot)com> |
| Cc: | Postgres General <pgsql-general(at)postgresql(dot)org> |
| Subject: | Re: What type of index do I need for this JOIN? |
| Date: | 2013-08-14 01:27:24 |
| Message-ID: | 520ADCFC.8040306@2ndquadrant.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-general |
On 08/14/2013 06:05 AM, Robert James wrote:
> I'm doing a JOIN which is very slow:
>
> JOIN t ON t.f1 LIKE (q.f1 || '%')
>
> t1 has an INDEX on (f1, f2) which I thought would help for this. But
> Postgres seems to still use a (very slow) Nested Loop. What type of
> index would be appropriate for this?
You'll need a text_pattern_ops index.
http://www.postgresql.org/docs/current/static/indexes-opclass.html
http://www.postgresql.org/docs/current/static/indexes-types.html
"The optimizer can also use a B-tree index for queries involving the
pattern matching operators LIKE and ~ if the pattern is a constant and
is anchored to the beginning of the string — for example, col LIKE
'foo%' or col ~ '^foo', but not col LIKE '%bar'. However, if your
database does not use the C locale you will need to create the index
with a special operator class to support indexing of pattern-matching
queries; see Section 11.9 below."
--
Craig Ringer http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Robert James | 2013-08-14 03:34:42 | Re: What type of index do I need for this JOIN? |
| Previous Message | Craig Ringer | 2013-08-14 01:23:38 | Re: MinGW compiled client library |