3

在此处输入图像描述使用以下

SELECT * 
FROM dbo.GRSM_WETLAND_POLY    
CROSS APPLY (SELECT TOP 1 Name, shape     
             FROM GRSM.dbo.GRSM_Trails --WITH(index(S319_idx))    
             WHERE GRSM_Trails.Shape.STDistance(dbo.GRSM_WETLAND_POLY.Shape) IS NOT NULL     
            ORDER BY GRSM_Trails.Shape.STDistance(dbo.GRSM_WETLAND_POLY.Shape) ASC) fnc

在 134 行(56 秒)上运行非常慢,但是,在未注释索引提示的情况下,它返回

消息 8635,级别 16,状态 4,第 3 行
查询处理器无法为带有空间索引提示的查询生成查询计划。原因:空间索引不支持谓词中提供的比较器。尝试删除索引提示或删除 SET FORCEPLAN。

执行计划显示过滤器成本为 98%,它查询另一个表中的 1400 行,因此总成本为 134 * 1400 次单独查找,这就是延迟所在。就其本身而言,每个表中的空间索引都表现出色,没有碎片,99% 的页面填充度,并且对所有 4 个网格级别使用中等,每个对象有 16 个单元格。更改任一表上的空间索引属性对性能没有影响。

文档表明空间索引提示只能在 SQL Server 2012 中的查询中使用,但肯定有解决方法吗?

4

1 回答 1

0

主要问题是你为什么要强制提示?如果 SQL Server 没有在它生成的计划中选择索引,那么强制执行另一个计划几乎总是会导致性能下降。

您应该做的是分析生成的执行计划的每个节点,看看花费这么长时间的瓶颈在哪里。如果您发布打印屏幕,也许我们可以提供帮助

于 2012-05-07T17:28:41.800 回答