Re: Appropriate indices to create for these queries

From: "Richard Huxton" <dev(at)archonet(dot)com>
To: "Gerald Gutierrez" <gutz(at)kalador(dot)com>, <pgsql-sql(at)postgresql(dot)org>
Subject: Re: Appropriate indices to create for these queries
Date: 2001-04-03 08:03:02
Message-ID: 00a101c0bc14$82eb4b40$1001a8c0@archonet.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

From: "Gerald Gutierrez" <gutz(at)kalador(dot)com>

>
> I've been looking into indices and which ones to create and I'm getting
> myself a little confused. The "PostgreSQL Introduction and Concepts" book
> didn't help very much. I wonder if a kind soul can give me some tips.
>
> SELECT * FROM T1 WHERE a=1 and b='hello';
>
> Is the appropriate index for this query:
>
> CREATE INDEX ndx ON T1 (a, b) ?

Maybe - you seem to have got to the core of the matter below...

> When I was testing, it seemed that even if I created the index with only
> "a", EXPLAIN told me that it would just do an index scan, seemingly
> indicating that it didn't matter whether I had an "a" index, or an "a, b"
> index.

For the above query, any of : index on "a" , "b", "a,b" will probably be
used (if you have enough data to justify it).

> How about for WHERE a=1 or b='hello' and other more complex forms? Is
there
> documentation that describes a variety of different queries and what kind
of
> indices are best?

In this case, an index on "a,b" isn't much use since the b='hello' values
are presumably scattered amongst all the various 'a' values.

In practice, unless you do a lot of a=1 and b="hello" queries you're
probably better off with separate indexes on a and b, or possibly even just
on one of them.

I tend to apply indexes to fields that take part in a join then add them one
at a time to other fields as it becomes clear which takes part in important
queries. Don't forget that it takes a certain amount of effort to maintain
an index.

You've already found the EXPLAIN command - this is your best guide to where
an index can be useful.

- Richard Huxton

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Richard Huxton 2001-04-03 08:05:32 Re: passing null parameter to plpgsq functions
Previous Message Picard, Cyril 2001-04-03 07:00:26 passing null parameter to plpgsq functions