sql - 如何强制视图使用特定索引?
问题描述
如何强制视图使用特定索引?
当我尝试强制使用 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
。
解决方案
您需要注意编写提示:查询/表提示仅用于推荐,优化器可能会像您的情况一样忽略它们。这一点没有很好的记录,但在某处提到,例如
当星型连接中的事实表使用引用多个索引的索引提示时,优化器会忽略索引提示并返回警告消息。
另一方面,您的查询是OPTION(RECOMPILE)
由于声明的变量而需要查询的典型示例:一旦为窄周期生成和缓存计划不适合大周期等。
推荐阅读
- entity-framework-6 - 在包含 EF6 中加载引用属性的引用属性
- c# - 在函数调用中实例化对象的性能(解释?)
- maven - Maven - 如何使用两个镜像
- c# - 并行化 Selenium 测试并保证线程安全
- javascript - 如何在 JavaScript 中使用标签初始化字符串而不拆分它或在斜杠之前添加反斜杠
- wordpress - 预加载链接 - wordpress 和 flatsome
- testing - CodeceptJS 完成后关闭浏览器窗口
- php - 重定向后引荐来源网址消失
- c - 有没有办法使用一些静态代码分析器显示函数的所有可能的回溯?
- android - 有没有办法在手机上远程构建和运行 Android Studio 应用程序?