Dear Paul,

Thanks for the tip, as you can see I'm a newbie...

I've run Explain on the query and the result is this:

UPDATE source.bag_new_buildings as aa SET units=bb.count FROM (SELECT cc.gid , count(*)
from source.bag_new_buildings as cc, source.bag_new_landuse as dd
where ST_Within(dd.the_geom, cc.the_geom) group by cc.gid) as bb WHERE aa.gid=bb.gid;

"Update on source.bag_new_buildings aa (cost=0.00..9265800547.24 rows=211379 width=949)"
"  ->  Merge Join  (cost=0.00..9265800547.24 rows=211379 width=949)"
" Output: aa.gid, aa.pandstatus, aa.bouwjaar, aa.energielab, aa.the_geom, aa.area, aa.gf_function, bb.count, aa.ctid, bb.*"
"        Merge Cond: (bb.gid = aa.gid)"
" -> Subquery Scan on bb (cost=0.00..9265772098.07 rows=211379 width=48)"
"              Output: bb.count, bb.*, bb.gid"
" -> GroupAggregate (cost=0.00..9265769984.28 rows=211379 width=4)"
"                    Output: cc.gid, count(*)"
" -> Nested Loop (cost=0.00..9265766615.81 rows=250936 width=4)"
"                          Output: cc.gid"
" Join Filter: ((dd.the_geom && cc.the_geom) AND _st_within(dd.the_geom, cc.the_geom))" " -> Index Scan using bag_new_buildings_pkey on source.bag_new_buildings cc (cost=0.00..24750.04 rows=211379 width=714)" " Output: cc.gid, cc.pandstatus, cc.bouwjaar, cc.energielab, cc.the_geom, cc.area, cc.gf_function, cc.units" " -> Materialize (cost=0.00..5114.21 rows=165414 width=100)"
"                                Output: dd.the_geom"
" -> Seq Scan on source.bag_new_landuse dd (cost=0.00..4287.14 rows=165414 width=100)"
"                                      Output: dd.the_geom"
" -> Index Scan using bag_new_buildings_pkey on source.bag_new_buildings aa (cost=0.00..24750.04 rows=211379 width=905)" " Output: aa.gid, aa.pandstatus, aa.bouwjaar, aa.energielab, aa.the_geom, aa.area, aa.gf_function, aa.ctid"


Just the sub query within the update gives this result:

SELECT cc.gid , count(*) from source.bag_new_buildings as cc, source.bag_new_landuse as dd
where ST_Within(dd.the_geom, cc.the_geom) group by cc.gid

"GroupAggregate  (cost=0.00..9265769984.28 rows=211379 width=4)"
"  Output: cc.gid, count(*)"
"  ->  Nested Loop  (cost=0.00..9265766615.81 rows=250936 width=4)"
"        Output: cc.gid"
" Join Filter: ((dd.the_geom && cc.the_geom) AND _st_within(dd.the_geom, cc.the_geom))" " -> Index Scan using bag_new_buildings_pkey on source.bag_new_buildings cc (cost=0.00..24750.04 rows=211379 width=714)" " Output: cc.gid, cc.pandstatus, cc.bouwjaar, cc.energielab, cc.the_geom, cc.area, cc.gf_function, cc.units"
"        ->  Materialize  (cost=0.00..5114.21 rows=165414 width=100)"
"              Output: dd.the_geom"
" -> Seq Scan on source.bag_new_landuse dd (cost=0.00..4287.14 rows=165414 width=100)"
"                    Output: dd.the_geom"


Is this helpful? It looks like these operations are meant to take really long.


Thank you,
Jorge


On 29/02/2012 23:15, Paul Ramsey wrote:
Without a query plan (explain ... ) there's not much people can do but
scratch their chins sagely.

P.

On Wed, Feb 29, 2012 at 3:11 PM, Jorge Gil<j.a.lopes...@tudelft.nl>  wrote:
Hi everyone,

I've been trying to do a spatial join for a couple of days in different ways
and it never seems to finish. I've done something identical before in a much
larger set of the same data and it worked after a few hours.

I have a polygons (buildings) table with 150,000 records and a points (land
use) table with 170,000 records. I want to calculate how many points are
within each building and add that total to the column 'units' in the
buildings table. The query I run is this:

UPDATE buildings as aa SET units=bb.count FROM (SELECT cc.gid , count(*)
from buildings as cc, landuse as dd
where ST_Within(dd.the_geom, cc.the_geom) group by cc.gid) as bb WHERE
aa.gid=bb.gid;

I also try to create a separate table with the results of the join before
doing the update, but the first step also fails.

Am I doing something wrong? Is there a simple trick that makes this more
efficient?

Thank you,
Jorge

--
Jorge Gil
PhD Candidate

TU Delft / Faculty of Architecture
Department of Urbanism
Chair of Spatial Planning and Strategy

Julianalaan 134
2628 BL Delft
P.O. Box 5043
2600 GA Delft
The Netherlands

www.tudelft.nl

_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users

--
Jorge Gil
PhD Candidate

TU Delft / Faculty of Architecture
Department of Urbanism
Chair of Spatial Planning and Strategy

Julianalaan 134
2628 BL Delft
P.O. Box 5043
2600 GA Delft
The Netherlands

www.tudelft.nl

_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to