why does explain analyze differ so much from estimated explain? - Mailing list pgsql-performance

From Dirk Lutzebäck
Subject why does explain analyze differ so much from estimated explain?
Date
Msg-id 415ADB01.9090001@aeccom.com
Whole thread Raw
List pgsql-performance
Hi,

I have a query where I do not understand that the rows number that
explain analyze finds differs so much from what explain estimates (3rd
nested loop estimates 1 row but in real it is 4222 rows). I did analyze
the tables (pgsql 7.4.1).

Here is the query:

explain analyze
SELECT fts.val_1, max(fts.val_2) AS val_2

FROM docobjflat AS fts,
      boxinfo,
      docobjflat AS ftw0,
      docobjflat AS ftw, envspec_map

WHERE boxinfo.member=158096693
AND boxinfo.envelope=ftw.envelope
AND boxinfo.community=169964332
AND boxinfo.hide=FALSE
AND ftw0.flatid=ftw.flatid
AND fts.flatid=ftw.flatid
AND fts.docstart=1
AND envspec_map.spec=169964482
AND envspec_map.community=boxinfo.community
AND envspec_map.envelope=boxinfo.envelope

AND ftw0.val_14='IN-A01'

GROUP BY fts.val_1;

Query plan is attached.

Regards Dirk
                                                                                     QUERY PLAN
                                                             

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 HashAggregate  (cost=134.58..134.58 rows=1 width=12) (actual time=1218.479..1218.480 rows=1 loops=1)
   ->  Nested Loop  (cost=0.00..134.57 rows=1 width=12) (actual time=723.208..1218.167 rows=173 loops=1)
         ->  Nested Loop  (cost=0.00..110.49 rows=1 width=42) (actual time=0.687..636.649 rows=4222 loops=1)
               ->  Nested Loop  (cost=0.00..86.39 rows=1 width=15) (actual time=0.567..28.520 rows=4222 loops=1)
                     ->  Nested Loop  (cost=0.00..38.04 rows=1 width=8) (actual time=0.394..6.078 rows=43 loops=1)
                           ->  Index Scan using boxinfo_audi_index on boxinfo  (cost=0.00..16.89 rows=4 width=8)
(actualtime=0.190..2.791 rows=165 loops=1) 
                                 Index Cond: (member = 158096693::oid)
                                 Filter: ((community = 169964332::oid) AND (hide = false))
                           ->  Index Scan using envspec_169964482_index on envspec_map  (cost=0.00..5.28 rows=1
width=8)(actual time=0.016..0.016 rows=0 loops=165) 
                                 Index Cond: ((envspec_map.envelope = "outer".envelope) AND (envspec_map.community =
169964332::oid))
                                 Filter: (spec = 169964482)
                     ->  Index Scan using docobjflat_169964482_envelope on docobjflat_169964482 ftw  (cost=0.00..47.31
rows=83width=19) (actual time=0.049..0.291 rows=98 loops=43) 
                           Index Cond: ("outer".envelope = ftw.envelope)
               ->  Index Scan using docobjflat_169964482_flatid on docobjflat_169964482 fts  (cost=0.00..24.07 rows=2
width=27)(actual time=0.010..0.138 rows=1 loops=4222) 
                     Index Cond: (fts.flatid = "outer".flatid)
                     Filter: (docstart = 1)
         ->  Index Scan using docobjflat_169964482_flatid on docobjflat_169964482 ftw0  (cost=0.00..24.07 rows=1
width=15)(actual time=0.135..0.135 rows=0 loops=4222) 
               Index Cond: ("outer".flatid = ftw0.flatid)
               Filter: (val_14 = 'IN-A01'::text)
 Total runtime: 1219.200 ms
(20 rows)


pgsql-performance by date:

Previous
From: John Meinel
Date:
Subject: Re: [pgsql-hackers-win32] Poor Performance for large queries
Next
From: Tom Lane
Date:
Subject: Re: [pgsql-hackers-win32] Poor Performance for large queries in functions