[postgis-users] Optimizer guess makes query 1000x slower?

strk strk at keybit.net
Tue Jun 15 03:48:01 PDT 2004


I'm do not know much about join types, but try substituting

	setSRID( 'BOX3D(-121.586865184167 38.4277618656666,-121.336132412548 38.6954249341005)'::BOX3D,find_srid('','cpal_events','the_geom'))

With:

	'SRID=<CPALSRID>;BOX3D(-121.586865184167 38.4277618656666,-121.336132412548 38.6954249341005)'

You'll have to know <SPALSRID> in advance, but that should give the
estimator usable input. I think the estimator result is a default one,
because it won't get a constant element in the && operation.

--strk;

On Tue, Jun 15, 2004 at 03:36:45AM -0700, rm_postgis at cheapcomplexdevices.com wrote:
> On Tue, 15 Jun 2004, strk wrote:
> > 
> > Report explain analyze select ... results if you want more help.
> > Also try modifying the query. The selectivity estimator only works
> > in the presence of a constant geometry in one side of the && operator.
> 
> 
> I have explain analyze results here.  Table definitions "\d tablename" 
> follow the "explain analyze select" results". The line that makes me think 
> it's a bad optimizer guess is the "rows=" part of this line:
> "Nested Loop  (cost=0.00..218.01 rows=1 width=546) (actual 
> time=2555.501..202056.918 rows=6357 loops=1)"
> 
>   Ron
> 
> [explain analyze results follow]
> 
>   ==============================================================
> 
> ronmap=# set enable_nestloop = true;
> SET
> ronmap=# explain analyze 
>   SELECT *
>     FROM cpal_events,cpal_selected_events
>    WHERE cpal_events.nextval=cpal_selected_events.eventid
>      and cpal_selected_events.owner='user.23469878.20252'
>      and the_geom && setSRID( 'BOX3D(-121.586865184167 38.4277618656666,-121.336132412548 38.6954249341005)'::BOX3D,find_srid('','cpal_events','the_geom'));
> 
>                                                                     QUERY PLAN                                                                     
> ---------------------------------------------------------------------------------------------------------------------------------------------------
>  Nested Loop  (cost=0.00..218.01 rows=1 width=546) (actual time=2555.501..202056.918 rows=6357 loops=1)
>    Join Filter: ("outer".nextval = "inner".eventid)
>    ->  Index Scan using cpal_event_summary__gist on cpal_events  (cost=0.00..6.01 rows=1 width=503) (actual time=0.100..261.886 rows=9570 loops=1)
>          Index Cond: (the_geom && 'SRID=-1;BOX3D(-121.586865184167 38.4277618656666 0,-121.336132412548 38.6954249341005 0)'::geometry)
>    ->  Seq Scan on cpal_selected_events  (cost=0.00..132.50 rows=6360 width=43) (actual time=0.005..12.020 rows=6357 loops=9570)
>          Filter: ("owner" = 'user.23469878.20252'::text)
>  Total runtime: 202079.387 ms
> (7 rows)
> 
> ronmap=# set enable_nestloop = false;
> SET
> ronmap=# explain analyze
>   SELECT *
>     FROM cpal_events,cpal_selected_events
>    WHERE cpal_events.nextval=cpal_selected_events.eventid
>      and cpal_selected_events.owner='user.23469878.20252'
>      and the_geom && setSRID( 'BOX3D(-121.586865184167 38.4277618656666,-121.336132412548 38.6954249341005)'::BOX3D,find_srid('','cpal_events','the_geom'));
>                                                                        QUERY PLAN                                                                       
> --------------------------------------------------------------------------------------------------------------------------------------------------------
>  Merge Join  (cost=540.31..572.13 rows=1 width=546) (actual time=161.258..266.926 rows=6357 loops=1)
>    Merge Cond: ("outer".nextval = "inner".eventid)
>    ->  Sort  (cost=6.02..6.03 rows=1 width=503) (actual time=129.153..137.399 rows=9570 loops=1)
>          Sort Key: cpal_events.nextval
>          ->  Index Scan using cpal_event_summary__gist on cpal_events  (cost=0.00..6.01 rows=1 width=503) (actual time=0.103..78.088 rows=9570 loops=1)
>                Index Cond: (the_geom && 'SRID=-1;BOX3D(-121.586865184167 38.4277618656666 0,-121.336132412548 38.6954249341005 0)'::geometry)
>    ->  Sort  (cost=534.29..550.19 rows=6360 width=43) (actual time=32.047..37.490 rows=6357 loops=1)
>          Sort Key: cpal_selected_events.eventid
>          ->  Seq Scan on cpal_selected_events  (cost=0.00..132.50 rows=6360 width=43) (actual time=0.074..15.649 rows=6357 loops=1)
>                Filter: ("owner" = 'user.23469878.20252'::text)
>  Total runtime: 281.134 ms
> (11 rows)
> 
> 
> 
> 
> 
> 
> ronmap=# \d cpal_events;
>             Table "public.cpal_events"
>       Column       |       Type       | Modifiers 
> -------------------+------------------+-----------
>  nextval           | bigint           | 
>  the_geom          | geometry         | 
>  [and lots of columns of data]
> Indexes:
>     "cpal_events__oid" unique, btree (oid)
>     "cpal_event_summary__gist" gist (the_geom)
>     "cpal_events__gist" gist (the_geom)
> Check constraints:
>     "$2" CHECK (geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL)
>     "$1" CHECK (srid(the_geom) = -1)
> 
> ronmap=# 
> ronmap=# \d cpal_selected_events;
>  Table "public.cpal_selected_events"
>     Column     |  Type   | Modifiers 
> ---------------+---------+-----------
>  name          | text    | 
>  owner         | text    | 
>  eventid       | integer |       
> 
> 
> 



More information about the postgis-users mailing list