如何强制视图使用特定索引?
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)
时:一旦为窄周期生成和缓存的计划不适合大周期等
如何强制视图使用特定索引?
当我尝试强制使用索引时收到以下警告消息:
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
.
编写提示时需要注意的事项: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)
时:一旦为窄周期生成和缓存的计划不适合大周期等