Dan*_*ola 7 spatial sql-server-2008 spatial-index covering-index
我目前有一个网站,其中包含一个具有Lat/Long浮点列的表,以及这两列的索引以及另一个我需要检索的列.
我一直在查询这个表,以获得从某一点落入半径范围内的行(我实际上得到了一个方形的速度),但我只需要已经编入索引的字段,所以这个索引实际上是覆盖的,执行计划只有两个步骤:
Index Seek (cost: 100%) and SELECT (cost: 0%)
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试利用SQL 2008的空间功能.我创建了Geography列,填充它,创建空间索引,工作.
这一切都运行正常,除了执行计划有一百万步,并且74%的时间花在了Clustered Index Seek上,它将它在Spatial Index中找到的行连接到实际表,以获得其余的数据...
(空间索引寻求占执行计划成本的1%)
所以,显然,它是正确地使用Spatial索引并使用我的"常规"索引比Lat/Long更快地找到我需要的记录,但加入主表是杀了我,空间查询需要7倍作为只要我的旧的.
有没有办法在空间索引中添加更多的列,以便它可以覆盖它,它可以一步完成,就像以前一样?
还有其他方法可以改善这种情况吗?
更新:我发现"常规"索引可以使用INCLUDE关键字"包含"其他列(我不知道,我过去只在索引本身中包含列)
根据此处的文档,该子句不是空间索引的选项...任何想法?
谢谢!
丹尼尔
小智 4
不,不幸的是,目前无法创建覆盖空间索引 - 查询将始终对基表进行书签查找,以便获取该行的地理值。
对于 STIntersects,这显然始终是必需的,因为我们仍然需要对实际地理对象执行二次过滤以验证它实际上与参数对象相交。但是,如果您不需要精确的答案并且可以使用 Filter(),那么可以从索引中提供主键列,而根本不需要查找基表。我们正在考虑在下一个版本中支持这一点。
在加速当前查询方面,您是否尝试过使用 Filter() 并使用 sp_help_geography_index 的输出调整索引?
归档时间: |
|
查看次数: |
987 次 |
最近记录: |