Actually, ST_Contains already contains an index call internal in the method.
SELECT p.prosrc as "Source code"
FROM pg_catalog.pg_proc p
WHERE p.proname ~ '^(st_contains)$';
Source code
-----------------------------------------
SELECT $1 && $2 AND _ST_Contains($1,$2)
(1 row)
Just make sure you have a GIST index created on your polygonal table
(and you've ANALYZEd your table). You can verify if your query is using
the index by prefixing your sql query with EXPLAIN. Note, however, that
just because you may have a spatial index on your polygon table, there's
no guarantee that PostgreSQL will necessarily use it. The query planner
does it's best to determine what indexes should be used and when. For
example, if every entry in your polygon table intersects the your token
POINT listed below, it doesn't make any sense to use the index. In
fact, using the index in such case will make your query significantly
slower.
Cheers,
Kevin
On 9/20/2010 5:00 AM, Li Li wrote:
hi all,
I use this condition in sql to get the polygons that contains this
point, is there any sql which utilize space index to speed up it?
I use "where ST_Contains(geom,ST_GeomFromText('POINT(116.355387
39.993801)',4326));" now. Thank you.
_______________________________________________
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