Re: Weird query execution paths, ignoring indexes... - Mailing list pgsql-general

From Stephan Szabo
Subject Re: Weird query execution paths, ignoring indexes...
Date
Msg-id Pine.BSF.4.21.0105251405530.79059-100000@megazone23.bigpanda.com
Whole thread Raw
In response to Weird query execution paths, ignoring indexes...  (Shaun Thomas <sthomas@townnews.com>)
List pgsql-general
On Fri, 25 May 2001, Shaun Thomas wrote:

> classifieds=# explain
> classifieds-# select distinct r.main
> classifieds-#   from clas_region r,
> classifieds-#        clas_category c,
> classifieds-#        clas_ad a
> classifieds-#  where c.paperid = 20
> classifieds-#    and a.paperid = c.paperid
> classifieds-#    and a.categoryid=c.categoryid
> classifieds-#    and r.regionid = c.regionid;
> NOTICE:  QUERY PLAN:
>
> Unique  (cost=1227.30..1227.81 rows=20 width=84)
>   ->  Sort  (cost=1227.30..1227.30 rows=203 width=84)
>         ->  Nested Loop  (cost=129.13..1219.54 rows=203 width=84)
>               ->  Merge Join  (cost=129.13..269.36 rows=173 width=60)
>                     ->  Index Scan using clas_region_pkey on clas_region r
>                         (cost=0.00..116.78 rows=1704 width=24)
>                     ->  Sort  (cost=129.13..129.13 rows=173 width=36)
>                           ->  Seq Scan on clas_category c
>                               (cost=0.00..122.71 rows=173 width=36)
>               ->  Index Scan using idx_test on clas_ad a  (cost=0.00..5.48
> rows=2 width=24)
>
>
> classifieds=# explain
> classifieds-# select distinct s.main
> classifieds-#   from clas_section s,
> classifieds-#        clas_category c,
> classifieds-#        clas_ad a
> classifieds-#  where c.paperid = 20
> classifieds-#    and a.paperid = c.paperid
> classifieds-#    and a.categoryid=c.categoryid
> classifieds-#    and s.sectionid = c.sectionid;
> NOTICE:  QUERY PLAN:
>
> Unique  (cost=730.49..730.70 rows=8 width=84)
>   ->  Sort  (cost=730.49..730.49 rows=82 width=84)
>         ->  Nested Loop  (cost=129.13..727.87 rows=82 width=84)
>               ->  Merge Join  (cost=129.13..341.14 rows=70 width=60)
>                     ->  Index Scan using clas_section_pkey on clas_section s
>                         (cost=0.00..177.55 rows=2585 width=24)
>                     ->  Sort  (cost=129.13..129.13 rows=173 width=36)
>                           ->  Seq Scan on clas_category c
>                               (cost=0.00..122.71 rows=173 width=36)
>               ->  Index Scan using idx_test on clas_ad a  (cost=0.00..5.48
> rows=2 width=24)
>
> As you can see, these queries are *identical* except for where
> clas_section and clas_region appear.  What confuses me, is that
> clas_region actually has *less* rows than clas_section; otherwise
> clas_region and clas_section are also identical tables.  The
> database is freshly vacuum and vacuum analyze'd, too.

> What's really frustrating, is that all of the columns referenced in
> both of these queries are *ALL INDEXED* on every table in question!
> It shouldn't even be touching the tables until it freaking runs out
> of indexes to scan! This is postgresql 7.1.1, which had some optimizer
> fixes I wanted in place, but it looks like there are still issues.

The only sequence scan I see in the explain output is clas_category.
How many rows does it have, and how many really match paperid=20
(The estimate seems to be 173)?  What does it show for explain output if
you set enable_seqscan to off?


pgsql-general by date:

Previous
From: Jeff Boes
Date:
Subject: Re: pl-perl setup?
Next
From: "Ian Harding"
Date:
Subject: UPDATE keyword