Sql server 2008 我可以创建一个;“空间覆盖”;SQL Server 2008中的索引?

Sql server 2008 我可以创建一个;“空间覆盖”;SQL Server 2008中的索引?,sql-server-2008,spatial,covering-index,spatial-index,Sql Server 2008,Spatial,Covering Index,Spatial Index,我目前有一个站点,它有一个表,表中有Lat/Long float列,在这两列上有一个索引,另外还有一个我需要检索的索引 我不断地查询这个表,以获取从某个点开始的半径范围内的行(实际上我得到的是一个速度平方),但我只需要已经索引的字段,所以这个索引实际上覆盖了所有字段,执行计划只有两个步骤: Index Seek (cost: 100%) and SELECT (cost: 0%) 现在,我试图利用SQL2008的空间特性。我创建了地理专栏,填充了它,创建了空间索引,还有作品 除了执行计划有一

我目前有一个站点,它有一个表,表中有Lat/Long float列,在这两列上有一个索引,另外还有一个我需要检索的索引

我不断地查询这个表,以获取从某个点开始的半径范围内的行(实际上我得到的是一个速度平方),但我只需要已经索引的字段,所以这个索引实际上覆盖了所有字段,执行计划只有两个步骤:

Index Seek  (cost: 100%) and SELECT (cost: 0%)
现在,我试图利用SQL2008的空间特性。我创建了地理专栏,填充了它,创建了空间索引,还有作品

除了执行计划有一百万个步骤,74%的时间都花在聚集索引查找上,它将在空间索引中找到的行连接到实际表,以获取其余的数据之外,所有这些都可以正常工作…
(空间索引搜索占执行计划成本的1%)

因此,很明显,它正确地使用了空间索引,并通过Lat/Long上的“常规”索引比以前更快地找到了我需要的记录,但是连接到主表让我非常痛苦,空间查询所需的时间是我以前的7倍

有没有办法向空间索引中添加更多的列,这样它就可以覆盖并一步到位,就像以前一样?
我还能做些什么来改善这种情况吗


更新:我发现“常规”索引可以使用include关键字“包含”其他列(我不知道,我过去只在索引本身中包含列)
根据文档,该子句不是空间索引的选项。。。 有什么想法吗

谢谢

Daniel

否,不幸的是,目前无法创建覆盖空间索引-查询将始终对基表进行书签查找,以获取该行的地理值

对于StinerSects,这显然总是必需的,因为我们仍然需要对实际的地理对象执行二级过滤,以验证它是否确实与参数对象相交。但是,如果您不需要精确的答案,并且可以使用Filter(),则可以从索引中提供主键列,而无需查找基表。我们正在考虑在下一版本中支持这一点

在加快当前查询速度方面,您是否尝试过使用Filter()并使用sp_help_geography_index的输出调整索引