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
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? |