[postgis-users] Faster point polygon query

Martin Davis mbdavis at refractions.net
Wed Jan 23 14:26:01 PST 2008


Some thoughts:

- ST_Distance is likely to be slow, since it does not do any optimizations
- ST_Within was recently optimized to include a fast point-in-polygon 
test.  Are you using a recent version of PostGIS?  It's funny that it 
isn't showing an effect in your test.  Perhaps you could try the same 
query using a non-spatial test, to get a baseline for how long the query 
takes to simply rip all the data off disk and run the join.
- does ST_Contains produce the same performance?

Also, we're currently working on "Prepared" (Cached) versions of various 
spatial predicates, including ST_Within.  Would it be possible for us to 
get a sample subset of your data to test and see whether the new code 
will improve things?

Dan Erikson wrote:
> I need to relate two spatial datasets.  One dataset is a point dataset 
> (~200 Million records), the other is a polygon dataset (~500,000 
> records).  The result of these queries is to be a non-spatial table 
> listing the id's ("tid" in this case) from each table where there is a 
> spatial join.  I have tried both ST_Within and ST_Distance, and both 
> queries are incredibly slow (> 100 hours).   Running on a very capable 
> server.  Any ideas on faster methods to complete this query?
>
> Thanks!
>
> CREATE TABLE public.step2 as
>    (SELECT mp.pntgrid_10_tid AS pntgrid_10_tid,
>        vri.tid AS vri_tid
>    FROM grids.tbl_mtsa_pnts mp, vri.tbl_vri vri
>    WHERE mp.geom && vri.geom
>        AND ST_Within(mp.geom, vri.geom));
>
> CREATE TABLE public.step2 as
>    (SELECT mp.pntgrid_10_tid AS pntgrid_10_tid,
>        vri.tid AS vri_tid
>    FROM grids.tbl_mtsa_pnts mp, vri.tbl_vri vri
>    WHERE mp.geom && vri.geom
>        AND ST_Distance(mp.geom, vri.geom) = 0);
>

-- 
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022




More information about the postgis-users mailing list