2014-05-13 115 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