我有两个表格需要求交集。第一个表格包含大约五千万个点,第二个表格是世界上所有国家的多边形图层。我想获取与该多边形相交的所有点。
SELECT d.id, d.geom
FROM export d, world_boundaries b
WHERE (b.cntry_name = 'UK')
AND d.date_inserted >= '2012-06-01'
AND d.geom && b.wkb_geometry
AND intersects(d.geom, b.wkb_geometry);
这个查询非常简单,但运行时间超过4小时。我已经在每个表的几何列上建立了GIST索引,并进行了VACUUM ANALYZE。仍然没有性能提升。我正在使用CENTOS 6与Postgres 8.4和PostGIS 1.5。有谁能够指导如何加快速度吗?当将查询限制为1000到10000条记录时,我可以很快地获得结果。当我尝试获取完整的结果集时,速度变慢。有什么想法吗?
更新:我现在意识到,我需要先优化我的查询作为这个过程的第一步。我像这样获取包络线
select astext(st_envelope(wkb_geometry)) as e
from world_borders
where cntry_name = 'UK'
现在,最有效的将其包含/执行作为整个查询的一部分的方式是什么?