SQL Server 2008中的地理数据类型有多好?

7

我有一个大型的客户数据库,实现在SQL Server 2005中。每个客户都有一个纬度和经度,表示为Decimal(18,15)。数据库中最重要的搜索查询尝试查找所有接近某个位置的客户,如下所示:

(Addresses.Latitude - @SearchInLat)  BETWEEN -1 * @LatitudeBound AND @LatitudeBound)
AND ( (Addresses.Longitude - @SearchInLng) BETWEEN -1 * @LongitudeBound AND @LongitudeBound)

所以,这是一个非常简单的方法。 @LatitudeBound@LongitudeBound只是数字,用于在点@SearchInLat,@SearchInLng的粗略边界矩形内检索所有客户。一旦结果到达客户端PC,一些结果被过滤掉,以便形成一个边界圆而不是矩形。(这是在客户端PC上完成的,以避免在服务器上计算平方根。)
这种方法过去已经足够好用了。然而,我们现在想让搜索做更有趣的事情——例如,让返回的结果数量更加可预测,或者让用户动态增加搜索半径的大小。为此,我一直在考虑升级到sql server 2008,使用其地理数据类型、空间索引和距离函数。我的问题是:这些查询有多快?
目前我们所拥有的简单查询的优点是非常快速且不会对性能产生压力,这一点非常重要,因为它被频繁调用。基于类似以下内容的查询将有多快呢:
SearchInPoint.STDistance(Addresses.GeographicPoint) < @DistanceBound

相比之下,性能如何?空间索引是否有效,并且STDistance速度是否快?

1个回答

9
如果您只是处理标准的经纬度对,并且只做简单的查找,那么使用几何类型可能不会带来太多速度上的提升。但是,如果您想更加冒险,那么转而使用几何类型将为您打开一个全新的世界,而且不仅仅是用于搜索。
例如(基于我正在处理的项目),如果您有英国数据,您可以下载给定区域所有城镇/村庄/城市的多边形定义,然后进行交叉引用以搜索特定的城镇;或者如果您有一张道路地图,您可以查找哪些客户住在主要交付路线、高速公路、主要道路等附近,等等。
您还可以进行一些非常花哨的报告,比如绘制每个城镇轮廓的地图,然后用颜色着色以显示该地区客户的密度,一些简单的几何 SQL 就可以轻松地从数据库中返回数量,以便绘制此类信息的图表。
然后还有跟踪,我不知道您处理哪些数据,或者为什么要有客户,但是如果您要交付任何东西,将交付车辆的坐标输入,就可以知道它距离给定客户有多近。
至于问题“STDistance快吗?”,这很难说,我认为更好的问题是“与...相比,它快吗?”,除非您有可比较的东西,否则很难回答是或否。
空间索引是将数据移动到地理感知数据库的主要原因之一,它们被优化以针对给定任务产生最佳结果,但像任何数据库一样,如果创建了不良索引,则会获得不良性能。
总的来说,您应该肯定会看到某种速度提升,因为排序和索引中的数学运算更加了解数据的目的,而不仅仅是像普通索引那样在操作上相当线性。
还要记住,SQL服务器机器越强大,您将获得更好的结果。
最后要提到的一点是数据管理,如果您使用GIS感知数据库,那么就可以使用ArcMap或MapInfo等GIS软件包来管理、校正和可视化您的数据,这意味着通过指向、点击和拖动非常容易进行校正。
我的建议是,在现有表格旁边创建一个用于空间操作的表格,然后编写一些存储过程并进行一些时间测试,看哪个效果最好。如果基本操作只是有显著增加,那么这就足够证明了;如果差不多,那么您的决定就取决于您实际想要实现的新功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接