Re: Appropriate indices to create for these queries
От | Richard Huxton |
---|---|
Тема | Re: Appropriate indices to create for these queries |
Дата | |
Msg-id | 00a101c0bc14$82eb4b40$1001a8c0@archonet.com обсуждение исходный текст |
Ответ на | Appropriate indices to create for these queries ("Gerald Gutierrez" <gutz@kalador.com>) |
Список | pgsql-sql |
From: "Gerald Gutierrez" <gutz@kalador.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
В списке pgsql-sql по дате отправления: