使用以下
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 中的查询中使用,但肯定有解决方法吗?