首页 > 解决方案 > 如何强制视图使用特定索引?

问题描述

如何强制视图使用特定索引?

当我尝试强制使用 index 时,我收到以下警告消息:

警告:为视图“BANK.CUSTOMER_ORDER_VIEW”提供的索引提示将被忽略。

以下是我的查询:

DECLARE  @VALUE_DATE_START DATE = '20181001',
         @VALUE_DATE_END DATE  = '20181025'

SELECT * 
FROM BANK.CUSTOMER_ORDER_VIEW WITH(INDEX(IX_ValueDate))
WHERE VALUE_DATE BETWEEN @VALUE_DATE_START AND @VALUE_DATE_END

IX_ValueDate是 中使用的表的索引BANK.CUSTOMER_ORDER_VIEW

标签: sqlsql-servertsqlsql-server-2014

解决方案


您需要注意编写提示:查询/表提示仅用于推荐,优化器可能会像您的情况一样忽略它们。这一点没有很好的记录,但在某处提到,例如

当星型连接中的事实表使用引用多个索引的索引提示时,优化器会忽略索引提示并返回警告消息。

另一方面,您的查询是OPTION(RECOMPILE)由于声明的变量而需要查询的典型示例:一旦为窄周期生成和缓存计划不适合大周期等。


推荐阅读