Sql server 空间索引在MS SQL Server中不起作用

Sql server 空间索引在MS SQL Server中不起作用,sql-server,indexing,tags,gis,spatial,Sql Server,Indexing,Tags,Gis,Spatial,我使用的是SQL Server 2008空间数据,但我遇到了一个奇怪的问题,即使用基于此表创建的视图查询表时,为表创建的空间索引不起作用。以下是我使用的脚本: declare @Geometry1 geometry = geometry::STGeomFromText( 'POINT(937767.89433333278 -230404.864666667)', 102003) exec sp_executesql N'SELECT shape FROM view WHERE (@Geom

我使用的是SQL Server 2008空间数据,但我遇到了一个奇怪的问题,即使用基于此表创建的视图查询表时,为表创建的空间索引不起作用。以下是我使用的脚本:

 declare @Geometry1 geometry = geometry::STGeomFromText(
'POINT(937767.89433333278 -230404.864666667)', 102003)

exec sp_executesql 
N'SELECT shape FROM view WHERE (@Geometry1.STIntersects(SHAPE)=1);',
 N'@Geometry1 geometry', @Geometry1
我在Google上搜索了很多,发现了一个解决方案,但似乎这个解决方案只适用于查询的几何体为点类型的多边形,如以下脚本:

declare @Geometry2 geometry = geometry::STGeomFromText(
'POLYGON((-2079214.0399 1392052.275,-2079214.0399 -1156112.025,
1981332.1069 -1156112.025,1981332.1069 1392052.275,
-2079214.0399 1392052.275))', 102003)

exec sp_executesql 
N'SELECT shape FROM view WHERE (@Geometry2.STIntersects(SHAPE)=1);',
 N'@Geometry2 geometry', @Geometry2
空间站仍然不起作用。有人知道如何处理这种情况吗?微软似乎没有对此给出很好的说明。
任何回复都将不胜感激。

请使用诊断存储过程
sp\u help\u spatical\u geography\u index\u xml
并查看其“输出”

这是您可以用来了解如何使用地理空间索引的主要存储过程

鉴于您的查询非常简单,
sp\u help\u spatical\u geography\u index\u xml
的@query\u sample参数可以与@geometry参数相同。这将告诉您一些相当有用的信息,例如空间索引是否需要完全扫描来评估问题


需要指出的另一点是:动态管理对象视图在文档中明确指出,它不支持空间索引,因此SQL Server并没有为这些索引提供大量智能。

这里有问题吗?我没有看到。对不起,我已经更新了问题。谢谢这并不能回答这个问题。请写一条评论。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-@埃里克布朗的问题是“有人知道如何处理这种情况吗?”这是处理这种情况的最好方法之一。调试空间查询的方法确实是有限的,因为基于成本的优化器只在查询计划输出中显示一个不透明的表值函数planarteselation。但是,在这种情况下,用户报告他们甚至没有看到正在使用的索引。鉴于它在地理空间上相当于书签查找(在单个点上),用户所能做的最好的事情就是要求SQL Server对样本的索引进行诊断。我已经更新了答案,以便让那些不经常使用SQL的人更清楚地知道为什么这是正确的答案。@EricBrown Stack Overflow没有危险。我们不会因为人们如何表达答案而惩罚他们。您是否使用SQL Server并理解为什么我的答案是正确的或不正确的,或者您只是在给我危险裁决?见: