Brian,

I think i've heard people talk about ways to get the most out of indexes on the list earlier. The gist index used in postgis uses the extents (bounding box) of the geometries as the indexed value. Geospatial functions involving the support libraries (like st_within, I imagine) are more expencive (no surprise, given the math involved) than vanilla where statements. To get the most bang for the buck, cpu-wise, one has to try to use of procedures, operators and filters in an optimized way.

Try reduce amount of geospatial processing that needs to be done.
There is a trick to help a little here: knowing that index is bounding box and that the spatial operators makes heavy use of the indexes.

To med your query looks like what I call a spatial join condition.
General hints on performance can be found here: http://postgis.refractions.net/docs/ch05.html

I'd like to see the execution plan of your query, along with this one:

select   name
from     gectable
where  geom_pts2 && (select the_geom from just_ca where  city = 'Berkeley' )
and st_within(geom_pts2, (select the_geom from just_ca where city = 'Berkeley' ))


http://postgis.refractions.net/docs/ch05.html

Anyways, its a little black magic involved in query tuning, and especially so with spatial queries.

Good luck,



Brian Hamlin skrev:
ok, no one bothered to point out my obvious mistake in the order lon/lat in the Polygon query...

Aside from that, I just double checked the SRIDs, dropped and reloaded the GIST indexes for both the POINT and MULTIPOLYGON tables, both in 4326, vacuumed and vacuumed again.

The basic question still stands - if I dont SetSRID(), I get a mixed SRID error msg with the SetSRID(), the Points in Polys takes 10 seconds to execute. That seems like a long time.

Is this expected performance?
Mac OS 10.10,  Powerbook 1ghz g4, decent 54gb internal drive

Why the mixed SRIDs error without the explicit calls?


SELECT gectable.name
FROM just_ca, gectable
WHERE
        just_ca.city = 'Berkeley'
AND
 st_within( SetSRID(gectable.geom_pts2,4326),
  SetSRID( just_ca.the_geom,4326))

this takes 10 seconds on 110,000 points (and 12 polys in city Berkeley).
(I added a GIST index on geom_pts2 and the_geom, and the query took
the same amount of time as without indexes. just_ca.city = 'Berkeley' alone
takes just 4ms)

The following query gets a mixed SRID error

SELECT gectable.name
FROM just_ca, gectable
WHERE
        just_ca.city = 'Berkeley'
AND
 st_within(  gectable.geom_pts2, just_ca.the_geom )

why??

_______________________________________________
postgis-users mailing list
[email protected]
http://postgis.refractions.net/mailman/listinfo/postgis-users

_______________________________________________
postgis-users mailing list
[email protected]
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to