Re: Index on a function and SELECT DISTINCT

From: Adrian Holovaty <postgresql(at)holovaty(dot)com>
To: pgsql-performance(at)postgresql(dot)org
Subject: Re: Index on a function and SELECT DISTINCT
Date: 2005-01-17 17:59:24
Message-ID: 200501171159.24797.postgresql@holovaty.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

Frank Wiles wrote:
> Adrian Holovaty <postgresql(at)holovaty(dot)com> wrote:
> > If I have this table, function and index in Postgres 7.3.6 ...
> >
> > """
> > CREATE TABLE news_stories (
> > id serial primary key NOT NULL,
> > pub_date timestamp with time zone NOT NULL,
> > ...
> > )
> > CREATE OR REPLACE FUNCTION get_year_trunc(timestamp with time zone)
> > returns timestamp with time zone AS 'SELECT date_trunc(\'year\',$1);'
> > LANGUAGE 'SQL' IMMUTABLE;
> > CREATE INDEX news_stories_pub_date_year_trunc ON
> > news_stories( get_year_trunc(pub_date) );
> > """
> >
> > ...why does this query not use the index?
> >
> > db=# EXPLAIN SELECT DISTINCT get_year_trunc(pub_date) FROM
> > news_stories;
> > QUERY PLAN
> > ---------------------------------------------------------------------
> > ------------
> > Unique (cost=59597.31..61311.13 rows=3768 width=8)
> > -> Sort (cost=59597.31..60454.22 rows=342764 width=8)
> > Sort Key: date_trunc('year'::text, pub_date)
> > -> Seq Scan on news_stories (cost=0.00..23390.55
> > rows=342764
> > width=8)
> > (4 rows)
> >
> > The query is noticably slow (2 seconds) on a database with 150,000+
> > records. How can I speed it up?
>
> It's doing a sequence scan because you're not limiting the query in
> the FROM clause. No point in using an index when you're asking for
> the entire table. :)

Ah, that makes sense. So is there a way to optimize SELECT DISTINCT queries
that have no WHERE clause?

Adrian

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Kaloyan Iliev Iliev 2005-01-17 18:02:39 Re: Performance problem from migrating between versions!
Previous Message Tom Lane 2005-01-17 17:55:49 Re: Optimizing this count query