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

How can I force a view to use a specific index?

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

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

Warning: Index hints supplied for view 'BANK.CUSTOMER_ORDER_VIEW' will be ignored.

下面是我的查询:

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.

中使用的 table 的索引

编写提示时需要注意的事项:query/table 提示仅供参考,优化器可能会像您的情况一样忽略它们。 这一点在某处没有很好的记录but mentioned,例如

When an index hint referring to multiple indexes is used on the fact table in a star join, the optimizer ignores the index hint and returns a warning message.

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