Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-performance by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group