Re: [repost] partial index / funxtional idx or bad sql?

From: csajl <csajl(at)yahoo(dot)com>
To: josh(at)agliodbs(dot)com, pgsql-performance(at)postgresql(dot)org
Subject: Re: [repost] partial index / funxtional idx or bad sql?
Date: 2003-05-13 00:47:10
Message-ID: 20030513004710.58428.qmail@web40312.mail.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance


hi josh.

i'm using 7.3.2. i tried using EXISTS instead of the IN, but the same query
now returns in seven sceonds as opposed to four with the IN.

cmdb=# EXPLAIN ANALYZE
cmdb-# select c.class_id, c.areacode, c.title from classifieds c
cmdb-# where c.class_cat_id = '1'
cmdb-# and c.areacode IN (
cmdb(# select areacode from cm_areacode where site_id = '10')
cmdb-# ;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------------
Index Scan using classifieds_dual_idx on classifieds c (cost=0.00..26622.14
rows=1837 width=39) (actual time=345.48..2305.04 rows=8460 loops=1)
Index Cond: (class_cat_id = 1)
Filter: (subplan)
SubPlan
-> Materialize (cost=3.46..3.46 rows=4 width=2) (actual time=0.00..0.01
rows=5 loops=61966)
-> Index Scan using site_cm_areacode_idx on cm_areacode
(cost=0.00..3.46 rows=4 width=2) (actual time=0.14..0.22 rows=5 loops=1)
Index Cond: (site_id = 10)
Total runtime: 2314.14 msec
(8 rows)
----------------------------------

classifieds_dual_idx is the btree index on (class_type_id, areacode)
and site_cm_areacode_idx is the btree index on (site_id) only.
there is an index in the areacode table that has both (site_id, areacode) but
it's apparently not being used. would it help the query to use that index
instead?

thanks for your help.

--- Josh Berkus <josh(at)agliodbs(dot)com> wrote:
> Seth,
>
> > SELECT p.id, p.areacode, p.content
> > FROM posts p
> > WHERE p.type_id = ?
> > AND p.areacode in (
> > select areacode from areacodes
> > where site_id = ?
> > )
>
> Unless you're using 7.4 from CVS, you want to get rid of that IN:
>
> SELECT p.id, p.areacode, p.content
> FROM posts p
> WHERE p.type_id = ?
> AND EXISTS (
> select areacode from areacodes
> where site_id = ?
> and p.areacode = areacodes.areacode
> );
>
> See how that works, and if it's still slow, post the EXPLAIN ANALYZE.

__________________________________
Do you Yahoo!?
The New Yahoo! Search - Faster. Easier. Bingo.
http://search.yahoo.com

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Nikolaus Dilger 2003-05-13 02:14:31 Re: PERFORMANCE and SIZE
Previous Message Josh Berkus 2003-05-13 00:13:38 Re: [repost] partial index / funxtional idx or bad sql?