【发布时间】:2012-05-07 17:07:21
【问题描述】:
使用下面的
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 中的查询中使用,但肯定有解决方法吗?
【问题讨论】:
标签: sql sql-server-2008 spatial-index