On Fri, 14 Jan 2005 12:32:12 -0600
Adrian Holovaty <[EMAIL PROTECTED]> 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. :) 

 ---------------------------------
   Frank Wiles <[EMAIL PROTECTED]>
   http://www.wiles.org
 ---------------------------------


---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faqs/FAQ.html

Reply via email to