Sql server 2008 sql server 2008中的地理数据类型有多好?

Sql server 2008 sql server 2008中的地理数据类型有多好?,sql-server-2008,Sql Server 2008,我有一个很大的数据库,里面满是客户,是用SQLServer2005实现的。每个客户都有一个纬度和经度,表示为十进制(18,15)。数据库中最重要的搜索查询尝试查找靠近某个位置的所有客户,如下所示: (Addresses.Latitude - @SearchInLat) BETWEEN -1 * @LatitudeBound AND @LatitudeBound) AND ( (Addresses.Longitude - @SearchInLng) BETWEEN -1 * @Longitude

我有一个很大的数据库,里面满是客户,是用SQLServer2005实现的。每个客户都有一个纬度和经度,表示为
十进制(18,15)
。数据库中最重要的搜索查询尝试查找靠近某个位置的所有客户,如下所示:

(Addresses.Latitude - @SearchInLat)  BETWEEN -1 * @LatitudeBound AND @LatitudeBound)
AND ( (Addresses.Longitude - @SearchInLng) BETWEEN -1 * @LongitudeBound AND @LongitudeBound)
SearchInPoint.STDistance(Addresses.GeographicPoint) < @DistanceBound
所以,这是一个非常简单的方法
@LatitudeBound
@LongitudeBound
只是数字,用于在点
@SearchInLat,@searchinling
的粗略边框内拉回所有客户。一旦结果发送到客户端PC,一些结果将被过滤掉,从而形成一个边界圆而不是矩形。(这是在客户端PC上完成的,以避免在服务器上计算平方根。)

这种方法在过去很有效。然而,我们现在想让搜索做更多有趣的事情——例如,让返回的结果的数量更加可预测,或者让用户动态地增加搜索半径的大小。为了做到这一点,我一直在考虑使用sql server 2008的地理数据类型、空间索引和距离函数进行升级的可能性。我的问题是:这些有多快

我们目前使用的简单查询的优点是它非常快速,而且不需要大量的性能,这一点很重要,因为它经常被调用。基于以下内容的查询速度有多快:

(Addresses.Latitude - @SearchInLat)  BETWEEN -1 * @LatitudeBound AND @LatitudeBound)
AND ( (Addresses.Longitude - @SearchInLng) BETWEEN -1 * @LongitudeBound AND @LongitudeBound)
SearchInPoint.STDistance(Addresses.GeographicPoint) < @DistanceBound
SearchInPoint.STDistance(Addresses.GeographicPoint)<@DistanceBound

相比之下是什么?空间索引是否工作良好,STDistance是否快速?

如果您只处理您描述的标准Lat/Lng对,并且您所做的只是一个简单的查找,那么可以说,通过使用几何体类型,您不会在速度提高方面获得太多好处

但是,如果您确实希望在陈述时更具冒险精神,那么切换到使用几何体类型将为您打开一个全新的世界,而不仅仅是搜索

例如(基于我正在从事的一个项目),您可以(如果是英国数据)下载给定区域内所有城镇/村庄/城市的多边形定义,然后进行交叉引用以搜索特定城镇,或者如果您有路线图,您可以找到主要配送路线、高速公路旁边的客户,主要道路,各种各样的东西

你也可以做一些非常奇特的报告,想象一张城镇地图,每个轮廓都被绘制在地图上,然后用颜色着色以显示一个地区的客户密度,一些简单的几何SQL将很容易直接从数据库返回一个计数,以绘制此类信息

然后是跟踪,我不知道你处理的是什么数据,也不知道你为什么有客户,但是如果你交付任何东西,输入送货车的坐标,告诉你它离给定客户有多近

至于这个问题,距离快吗?这很难说真的,我认为一个更好的问题是“与……相比,它快吗?”,很难说是或不是,除非你有什么东西可以比较

空间索引是将数据移动到地理位置感知数据库的主要原因之一。空间索引经过优化,可为给定任务产生最佳结果,但与任何数据库一样,如果创建的索引不好,则性能会很差

一般来说,您肯定会看到某种程度的速度提高,因为排序和索引中的数学更了解数据的用途,而不是像普通索引那样在操作中相当线性

请记住,SQL server机器越坚固,您将获得越好的结果

最后要提到的一点是数据管理,如果您使用的是支持GIS的数据库,那么这将为您使用GIS包(如ArcMap或MapInfo)来管理、更正和可视化数据打开一条通道,这意味着通过指向、单击和拖动来更正数据非常容易

我的建议是在现有表的基础上创建一个并排的表,该表是为空间操作格式化的,然后编写一些存储过程并进行一些计时测试,看看哪一个是最好的。如果你仅仅在基本操作上有了显著的提高,那么这仅仅是理由,如果它大致相等,那么你的决定就取决于你真正想要实现什么样的新功能