使用以下
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秒)上运行速度非常慢,但是,如果索引提示未注释,则返回
Msg 8635,Level 16,State 4,Line 3
查询处理器无法为具有空间索引提示的查询生成查询计划。原因:空间索引不支持 谓词中提供的比较器。尝试删除索引提示或 删除SET FORCEPLAN。
执行计划显示过滤器成本为98%,它在另一个表中查询1400行,因此总成本为134 * 1400个人搜索,这是延迟的位置。就其本身而言,每个表中的空间索引表现很好,没有碎片,99%的页面丰满度,并且对所有4个网格级别使用介质,每个对象有16个单元格。更改任一表上的空间索引属性对性能没有影响。
文档建议空间索引提示只能用于SQL Server 2012中的查询,但肯定有解决方法吗?
答案 0 :(得分:0)
主要问题是你为什么要强制提示?如果SQL Server没有在它生成的计划上选择索引,那么强制另一个计划几乎总会导致性能下降。
您应该做的是分析生成的执行计划的每个节点,看看瓶颈在哪里花了这么长时间。如果您发布打印屏幕,我们可以提供帮助