From: | Pierre-Frédéric Caillaud <lists(at)boutiquenumerique(dot)com> |
---|---|
To: | Shiar <postgres(at)shiar(dot)org>, pgsql-performance(at)postgresql(dot)org |
Subject: | Re: index not used when using function |
Date: | 2004-10-03 15:29:37 |
Message-ID: | opsfavznrzcq72hf@musicbox |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
Maybe add an order by artist to force a groupaggregate ?
> Hi all, a small question:
>
> I've got this table "songs" and an index on column artist. Since
> there's about
> one distinct artist for every 10 rows, it would be nice if it could use
> this
> index when counting artists. It doesn't however:
>
> lyrics=> EXPLAIN ANALYZE SELECT count(DISTINCT artist) FROM songs;
> Aggregate (cost=31961.26..31961.26 rows=1 width=14) (actual
> time=808.863..808.864 rows=1 loops=1)
> -> Seq Scan on songs (cost=0.00..31950.41 rows=4341 width=14)
> (actual time=26.801..607.172 rows=25207 loops=1)
> Total runtime: 809.106 ms
>
> Even with enable_seqscan to off, it just can't seem to use the index.
> The same
> query without the count() works just fine:
>
> lyrics=> EXPLAIN ANALYZE SELECT DISTINCT artist FROM songs;
> Unique (cost=0.00..10814.96 rows=828 width=14) (actual
> time=0.029..132.903 rows=3280 loops=1)
> -> Index Scan using songs_artist_key on songs (cost=0.00..10804.11
> rows=4341 width=14) (actual time=0.027..103.448 rows=25207 loops=1)
> Total runtime: 135.697 ms
>
> Of course I can just take the number of rows from the latter query, but
> I'm
> still wondering why it can't use indexes with functions.
>
> Thanks
From | Date | Subject | |
---|---|---|---|
Next Message | Greg Stark | 2004-10-03 21:56:42 | Re: Query planner problem |
Previous Message | Tatsuo Ishii | 2004-10-03 15:28:23 | Re: Caching of Queries |