2016-10-20 101 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