2014-05-13 117 views
0

我使用PostGIS的半径查询功能,寻找使用地理柱半径范围内的点:影响查询

select count(*) from goeocde_table WHERE ST_DWithin(geog, ST_MakePoint(-76.07,36.21),640000) ; 

我已经定义上的GeOG柱的顶部空间索引。 但是,只要增加半径,我就会看到很大的性能影响。是否预计?

回答

1

总之,是的。 Postgres/Postgis中的空间索引基于R树,R树是一种树形结构,它试图根据边界框来细分您的区域,请参见http://en.wikipedia.org/wiki/R-tree,同时尝试在搜索速度和插入/删除新速度之间保持平衡值。 所以,如果你足够幸运地发出一个查询,你的点加上它周围的距离完全包含在叶节点上的一个盒子中,那么你会得到一个非常快速的回应。只要放大搜索区域,以便它与相邻的边界框相交,就会有更多的候选人搜索距离您的距离,并指向潜在的候选人。另外,请注意,查询中的点位于纬度/经度,但搜索距离以米为单位,因此根据上面的示例查询,您正在请求非常大的搜索区域。在Postgis中有另一个空间运算符< - >,如果您正在寻找到某个点的x个最近邻居,可能会导致搜索速度更快,请参阅http://postgis.net/docs/geometry_distance_centroid.html