2014-03-12 69 views
0

我需要優化這個查詢,'因爲執行時間太長。我已經在geom(point)上構建了主要索引,但它們並沒有被不幸地使用。如何優化空間查詢?

select *, cast(st_distance_sphere(city_gis.point, tmp1.pnt) as int) as distance 
     from tmp1 
    inner join city_gis 
    on cast(st_distance_sphere(city_gis.point,tmp1.pnt) as int) between 0 and 60000 

Here my query and execution plan

+0

我猜''city_gis.point'的類型是'geometry(Point,4326)',對嗎? –

+0

是的,你是對的。 – user3306125

回答

0

ST_DISTANCE功能不使用幾何指數。您應該使用例如ST_DWITHIN所以你的查詢會是這樣的

select *, cast(st_distance_sphere(city_gis.point, tmp1.pnt) as int) as distance 
from tmp1 
inner join city_gis on st_dwithin(city_gis.point,tmp1.pnt,60000) 

這裏是這個功能的文件。

http://postgis.org/docs/ST_DWithin.html

+0

好吧,我試試這個,但它並不能幫助我:執行時間還是一樣=( – user3306125

+0

你有兩個GEOM列幾何指數也許數據庫查詢計劃中的其他工作方向 – wumpz

+0

是的,我」?。 m確定geom索引在兩個geom col-s上 – user3306125

0

如果你有一個表叫city_gis,我會認爲這是GIS數據表的城市。這是一個城市還是更多?如果它在地理上是孤立的,那麼通過使用該區域的投影座標系使生活更容易。您始終可以將座標轉換回經緯度以用於其他用途。通過使用投影座標系,任何距離相關功能都將使用投影單位。例如,使用UTM座標系時,距離單位總是以米爲單位。顯然,如果你的表格確實包含來自世界各地不同城市的數據,甚至在一個大陸上,這將不起作用。

+0

不,這個表中有很多城市(> 30 000),我之所以這麼稱呼是因爲它適合我。此表:city_id,城市,國家,經緯度。 – user3306125