基于函数的索引XY坐标

时间:2016-10-20 00:22:44

标签: sql oracle function indexing

我有一个查询,它返回最远离一组XY坐标的sighting_id。我试图在XY坐标上创建基于函数的索引来加速查询,我看到如何为包含字符串的字段构建一个但我不确定如何在xy坐标上构建。

目击模式(sighting),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);

1 个答案:

答案 0 :(得分:0)

通常,传统的索引对于比较坐标数据非常差,因为您可以在两个或更多方向上靠近(或远)。如果你的距离覆盖了地球的很大一部分并且你必须容纳一个弯曲的表面而不是将空间视为平坦的,那就变得更加复杂。

如果您有定期查询的任何重要数据集,请继续阅读适用于您的Oracle版本的Oracle Spatial指南,并注意Appendix B(其中包含您未经许可使用的内容)支付额外的选项)和indexing