【问题标题】:Spatial index hints don't work in SQL Server 2008?空间索引提示在 SQL Server 2008 中不起作用?
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 我添加了一个屏幕截图。如发布的那样,强制提示不起作用,并且生成的计划显示瓶颈几乎仅限于过滤器,我似乎无法绕过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2012-06-10
    • 1970-01-01
    • 2010-11-23
    相关资源
    最近更新 更多