我有一个大型Oracle数据库(720,000条记录aprox),其中每条记录都有自己的地理坐标(lat&lng),我只需要选择距离某一点(特定半径内)特定距离的记录.
目前我已经实现了在oracle论坛中找到的距离函数(基于hasrsine),但由于数据库有点大,每次选择花费大约50秒.
关于如何有效地做任何建议?我知道有一个名为oracle spatial&locator的扩展,但我不知道我是否可以购买它甚至它是如何工作的.非常感谢提前.最好的祝福
使用更好的算法.不需要计算需要平方根计算的实际欧几里德距离,而是选择仅需要减法和加法的线性距离.即如果您的点位于(10,10)并且您的半径为5,则选择由(10 +/- 5,10 +/- 5)形成的正方形内的点的所有位置.
这将在广场的角落捕获少量误报.通过计算适当的欧几里德距离,仔细检查应用程序中的结果来消除这些.
提供有关Lat和Long值的特定格式的更多详细信息,以及用于实现hasrsine的特定公式.
有三种方法可以加快速度.根据具体情况,我们至少可以做到其中两个.
通过简单的属性值比较来尽可能多地删除记录.
对于这些记录,我们根本不需要计算任何东西.
例如,将最大半径要求转换为经度(可能是纬度)值的[慷慨但近似]范围
使用替代(可能是近似的)距离测量.
例如,基于向上舍入的坐标计算eucldidian距离的平方可能更快.(当然要将其与所需半径的平方进行比较)
改进实施hasrsine配方的方式.