2012-04-12 141 views
12

我想了解如何在SQL SERVER 2012中使用空间索引。我有一些非常耗时的查询,所以我需要它。使用空间索引

我会很感激一些例子和解释。

谢谢!

回答

15

前段时间,我在SQLBits会议上介绍了一个会议,您可能会发现有帮助。您仍然可以在观看视频和slidedeck在线:http://sqlbits.com/Sessions/Event5/Creating_High_Performance_Spatial_Databases

一言以蔽之:

  • 空间索引是在SQL Server群集和非聚集索引完全不同。
  • 他们通过为空间查询提供“主要过滤器”来工作 - 空间索引使用网格来选择一组近似的可能候选结果,但可能包含误报。
  • 辅助筛选器然后消除误报以获取查询的真实结果集。
  • 获得快速执行的空间查询的关键是创建一个准确(即少的误报)但小(即不是太多记录要搜索)的索引,以便大部分工作由主过滤器完成,而不是更贵的二级过滤器。
  • 您可以使用SQL Server Management Studio或使用CREATE INDEX T-SQL语句在一列几何/地理数据上创建空间索引。但是,该索引可能并不总是在查询中自动使用。要检查是否正在使用空间索引,请查看集群索引搜索(空间)项目的查询执行计划。
  • 要确保使用空间索引来完成查询,可以通过在SELECT语句中的表名后面添加WITH(index(YourSpatialIndex))来添加显式索引提示。

有几个空间索引特定的设置会影响主过滤器的性能。首先,我建议您坚持默认设置,即在所有四个网格级别均为中等分辨率,每个对象为16个单元格。如果您使用的是几何数据类型,请确保设置了一个包含整个数据集的BOUNDING_BOX(对于地理来说,空间索引始终覆盖整个地球,所以这不是必需的)。然后,尝试一次调整一个设置并测量性能增加/减少。

<插头>有一个专门的空间索引,并在即将到来的空间查询“临空间与SQL Server 2012” < /插头>的提高性能的篇章 - http://www.amazon.com/Pro-Spatial-SQL-Server-2012/dp/1430234911/ref=sr_1_3?ie=UTF8&qid=1334310547&sr=8-3(全免责声明 - 我是作者)

+0

谢啦!你很棒!这是我正在寻找的。 – Nenad 2012-04-13 15:04:08

+0

Aitchison,我有一个空间索引的问题 - http://stackoverflow.com/questions/11088775/error-when-using-spatial-index-in-sql-server你能帮忙吗?谢谢! – Nenad 2012-06-19 16:10:07