[postgis-users] Overlap Queries - speed
Ethan Alpert
ealpert at digitalglobe.com
Mon Oct 3 14:11:37 PDT 2005
Bill I thought it was discovered that distance() was faster than
intersects()
-e
-----Original Message-----
From: postgis-users-bounces at postgis.refractions.net
[mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of Bill
Binko
Sent: Monday, October 03, 2005 2:28 PM
To: PostGIS Users Discussion
Subject: Re: [postgis-users] Overlap Queries - speed
On Mon, 3 Oct 2005, Robert Burgholzer wrote:
> I have a question regarding performance, running postGIS 1.0.4 on
> postgreSQL 8.0.3. running on RedHat Enterprise ES, 1.113 GHz Inter
> Pentium III, 376 Megs of RAM
>
> I am performing an intersection calculation on two spatial tables, the
> tables are as follows:
>
> bmp_multiseg : 6579 records
> p5lrsegs : 2364 records
>
> QUERY:
> select a.msid, b.lrseg, b.landseg, b.riverseg,
> area2d(intersection(a.the_geom, b.the_geom))/area2d(b.the_geom)
from
> bmp_multiseg as a, p5lrsegs as b where a.the_geom && b.the_geom;
>
> basically, there are several inputs in bmp_multiseg at a number of
> overlapping resolutions that I am distributing amongst the second
> table p5lrsegs, with an average of ~ 6 overlaps from bmp_multiseg to
> p5lrsegs, making a total of ~ 15,000 records in the resulting query.
> This query takes over an hour to complete with spatial indices on both
> tables geometry field.
>
> The geometries are not simple, they range in size from between 5-20K
> per row, perhaps this is part of the problem?
>
> Any insight would be appreciated. Even if you tell me that this is
> reasonable and I have to just suck it up, or look for another tool to
> do my calculations, those kinds of insights are good to know.
Well, one thing that might help would be to add an intersects() to your
where clause. If you shapes are very irregular, your && will cause many
false positives causing too many empty intersection shapes to be
created.
(Someone correct me if I'm wrong).
So you might try:
QUERY:
select a.msid, b.lrseg, b.landseg, b.riverseg,
area2d(intersection(a.the_geom, b.the_geom))/area2d(b.the_geom) from
bmp_multiseg as a, p5lrsegs as b where a.the_geom && b.the_geom AND
intersects(a, b);
Another thing (obviously) is to make sure that your indexes are being
used. Run a EXPLAIN on that query and post the results.
Bill
_______________________________________________
postgis-users mailing list postgis-users at postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users
More information about the postgis-users
mailing list