【问题标题】:How good is the geography datatype in sql server 2008?sql server 2008 中的 geography 数据类型有多好?
【发布时间】:2011-09-05 11:06:47
【问题描述】:

我有一个充满客户的大型数据库,在 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 的可能性,包括 Geography 数据类型、空间索引和距离函数。我的问题是:这些速度有多快?

我们目前拥有的简单查询的优点是速度非常快且不占用大量性能,这很重要,因为它经常被调用。基于这样的查询的速度有多快:

SearchInPoint.STDistance(Addresses.GeographicPoint) < @DistanceBound

比较?空间索引是否运行良好,STDistance 是否快?

【问题讨论】:

    标签: sql-server-2008


    【解决方案1】:

    如果您只处理您描述的标准 Lat/Lng 对,并且您所做的只是简单的查找,那么可以说您不会通过使用 Geometry Type 来提高速度。

    但是,如果您确实想像您所说的那样冒险,那么改用 Geometry 类型将为您打开一个充满新可能性的世界,而不仅仅是搜索。

    例如(基于我正在处理的项目)您可以(如果是英国数据)下载给定区域的所有城镇/村庄/城市的多边形定义,然后进行交叉引用以搜索特定区域镇,或者如果您有路线图,您可以找到哪些客户住在主要送货路线、高速公路、主要道路等附近。

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

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

    至于问题是STDistance快吗?好吧,这真的很难说,我认为一个更好的问题是“与......相比是否快”,很难说是或否,除非你有什么可以比较的。

    空间索引是将数据移动到地理感知数据库的主要原因之一,它们经过优化可以为给定任务产生最佳结果,但与任何数据库一样,如果您创建错误的索引,那么您将获得糟糕的性能。

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

    请记住,SQL 服务器机器越强大,您将获得更好的结果。

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

    我的建议是为您现有的表创建一个并排的表,该表已格式化为空间操作,然后编写一些存储过程并进行一些时序测试,看看哪个结果最好。如果您仅在您所做的基本操作上有显着增加,那么这仅仅是理由,如果它大致相同,那么您的决定真的取决于您真正想要实现的新功能。

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 2010-12-04
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多