2016-10-20 116 views
0

我有一個查詢,它返回距離一組XY座標最遠的sighting_id。即時通訊嘗試在XY座標上創建基於函數的索引以加快查詢速度,iv瞭解如何爲包含字符串的字段構建一個,但不確定如何構建xy座標。基於函數的索引XY座標

的架構目擊(sighting_id(PK),spotter_id,bird_id,緯度,經度,年月日,描述)

WITH params as (SELECT -28 as lat, 151 as lon 
       FROM dual) 
SELECT sighting_id, sqrt(power(lat - latitude, 2) + power(lon - longitude, 2)) 

AS distance FROM sightings CROSS JOIN params 

WHERE sqrt(power(lat - latitude, 2) + power(lon - longitude, 2)) = 

(SELECT MAX(sqrt(power(lat - latitude, 2) + power(lon - longitude, 2))) 

FROM sightings CROSS JOIN params); 

回答

0

一般傳統的索引是比較座標信息,因爲你可以靠近很差(或遠)兩個或多個方向。如果你的距離覆蓋地球的一個重要部分,那麼它就變得更加複雜,你必須容納一個曲面而不是將空間看作是平坦的。

如果您有一個定期查詢任何重要大小的數據集,請參閱您的Oracle版本的Oracle Spatial指南,注意Appendix B(其中包含您無需支付額外費用就可以使用的許可證)選項)和indexing