我可以在SQL Server 2008中创建“覆盖,空间”索引吗?
我目前有一个网站,其中有一个纬度/长度浮动列的表格,以及索引在这两列以及另一个我需要检索的索引。
我一直在查询这张表,从某个特定点(我实际上得到一个速度的正方形)中的行,但我只需要已经索引的字段,因此这个索引实际上覆盖了,执行计划只有两个步骤:
Index Seek (cost: 100%) and SELECT (cost: 0%)
现在,我试图利用SQL 2008的空间特性。我创建了Geography列,填充了它,创建了空间索引和作品。
除了执行计划有一百万步以外,其余74%的时间都花费在一个聚集索引搜索上,它将它在空间索引中找到的行连接到实际的表中,以便让其他人得以休息的数据...
(空间索引查找占执行计划成本的1%)
因此,显然,它正确地使用Spatial索引并找到我需要比以前快得多的记录,而我的“常规”索引超过Lat / Long,但加入主表的方式是杀我,Spatial查询需要7次就像我的老一样。
有没有什么办法可以在空间索引中添加更多的列,这样它就可以覆盖并且可以一步完成任务,就像之前做的一样?
我还有其他的事情可以改善这种状况吗?
更新:我发现“常规”索引可以使用INCLUDE关键字“包含”其他列(我不知道,我过去只是将索引包含在索引本身中)
根据这里的文档,该条款不是空间索引的选项......任何想法?
谢谢!
丹尼尔
不,很不幸,目前没有办法创建覆盖空间索引 - 查询将始终对基表执行书签查找,以便获取该行的地理值。
对于STIntersects,这显然总是需要的,因为我们仍然需要对实际地理对象执行二级过滤器,以验证它是否实际上与参数对象相交。 但是,如果您不需要确切的答案并且可以使用Filter(),则可以根据索引提供主键列,而无需查找基本表。 支持这是我们正在考虑的下一个版本。
在加速当前查询方面,您是否尝试过使用Filter()并使用sp_help_geography_index的输出调整索引?
链接地址: http://www.djcxy.com/p/43117.html上一篇: Can I create a "Covering, Spatial" index in SQL Server 2008?
下一篇: variable parameter function, how to make it type safe and more meaningful?