使用空间索引

时间:2012-04-12 19:40:36

标签: sql-server tsql sql-server-2012

我想学习如何在SQL SERVER 2012中使用Spatial Index。我有一些非常耗时的查询,所以我需要它。

我会非常感谢一些例子和解释。

谢谢!

1 个答案:

答案 0 :(得分:15)

我刚才在SQLBits会议上发表了一个你可能会觉得有用的会议。您仍然可以在http://sqlbits.com/Sessions/Event5/Creating_High_Performance_Spatial_Databases

在线观看视频和幻灯片

简而言之:

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

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

< plug>在即将推出的“Pro Spatial with SQL Server 2012”< / plug>中,有一章致力于空间索引和提高空间查询的性能。 - http://www.amazon.com/Pro-Spatial-SQL-Server-2012/dp/1430234911/ref=sr_1_3?ie=UTF8&qid=1334310547&sr=8-3(完全免责声明 - 我是作者)