Querying distinct values from a large table

Igor Lobanov <ilobanov@swsoft.com>

From: Igor Lobanov <ilobanov@swsoft.com>
To: pgsql-performance@postgresql.org
Date: 2007-01-30T08:33:34Z
Lists: pgsql-performance
Greetings!

I have rather large table with about 5 millions of rows and a dozen of 
columns. Let's suppose that columns are named 'a', 'b', 'c' etc. I need 
to query distinct pairs of ('a';'b') from this table.

I use following query:

SELECT DISTINCT a, b FROM tbl;

but unfortunately, it takes forever to complete. Explaining gives me 
information that bottleneck is seqscan on 'tbl', which eats much time.

Creating compound index on this table using following statement:

CREATE INDEX tbl_a_b_idx ON tbl( a, b );

gives no effect, postgres simply ignores it, at least according to the 
EXPLAIN output.

Is there any way to somehow improve the performance of this operation? 
Table can not be changed.

-- 
Igor Lobanov
Internal Development Engineer
SWsoft, Inc.