优化表格以搜索地理位置

Posted

技术标签:

【中文标题】优化表格以搜索地理位置【英文标题】:Optimising a table to search for geographic locations 【发布时间】:2014-04-23 14:54:13 【问题描述】:

我有一张表,其中有几百万条与世界各地有关的记录。

我希望能够根据与当前位置的距离对表格进行搜索,因此我创建了一个函数,该函数从数据库记录中获取我的纬度和经度以及纬度和经度并返回距离.然后我可以使用这个图来执行距离搜索。

我认为,为了让查询正常工作,它必须转换数据库中的每条经纬度记录,以检查它是否在我的距离搜索范围内。

我使用的是 SQL Server 2005

我的问题是,有没有更好的方法来做到这一点,以便不必转换每条记录?

【问题讨论】:

有机会升级数据库吗?从 SQL Server 2008 开始,他们引入了Geography(和几何)数据类型,这使得这变得更快。 Base Server 2005 我认为你被卡住了。 【参考方案1】:

当我需要这样做时,我会限制我的数据池以使用围绕我当前数据点的“框”进行检查。例如,在伪 SQL 中:

SELECT DataID, lat, long, distance=fn_getdistance(@ThisLat, lat, @ThisLong, long) FROM MyTable WHERE lat BETWEEN (@ThisLat - @LatDistance) AND (@ThisLat + @LatDistance) AND long BETWEEN (@ThisLong - @LongDistance) AND (@ThisLong + @LongDistance)

变量: @ThisLat, @ThisLong:您当前位置的纬度和经度 @LatDistance、@LongDistance:围绕您当前位置的“框”的尺寸(根据您的应用程序和需要使用不同的数字)

(显然,您需要在 lat 和 long 字段上建立索引。)

【讨论】:

以上是关于优化表格以搜索地理位置的主要内容,如果未能解决你的问题,请参考以下文章

地理数据搜索的优化

优化地理位置搜索

优化地理搜索查询

菜单搜索栏:搜索表格和位置

优化位置搜索mysql脚本

移动表格视图位置和隐藏视图