【问题标题】:Why does SQL ignore an index hint and opt for a different index?为什么 SQL 会忽略索引提示并选择不同的索引?
【发布时间】:2013-05-18 07:23:51
【问题描述】:

给定一个表,上面有两个索引,一个与另一个反向排序并给出这两个查询。

Select value From SomeTable wITH (INDEX(IV_Sort_Asc))
Select value From SomeTable wITH (INDEX(IV_Sort_Desc))

我在 SQL Server 2008 中遇到过忽略提示的情况,在这两种情况下都使用IV_Sort_Desc 索引而不是第一个索引。

我意识到很多人会立即建议不要提供提示,但是鉴于我的具体情况,这不是一个选择。

什么会导致这种情况,我可以做些什么来解决它?您肯定希望 SQL Server 遵守索引提示而不使用其他提示吗?

【问题讨论】:

  • 那么我该如何强制它使用特定的索引呢?我在寻找命令,而不是提示。
  • 我有非常大的索引视图,我正在使用索引,因为它是预先排序的。如果我在 10+ 百万行上运行排序命令,我会坐在这里很长时间。通过仔细构建查询并使用正确的索引,它几乎可以立即返回结果,问题是在这种特殊情况下(索引视图上的索引)它不再尊重我提供的参数。
  • 查看文档,我的猜测会是 SQL Server 无法使用该索引提出有效的执行计划。是否返回任何警告?
  • 不,我检查了查询计划。最后我恢复到一个单一的索引,服务器正确地选择了它。我还是有点疑惑。

标签: sql sql-server-2008 indexing query-optimization query-hints


【解决方案1】:

当我希望 SQL 在视图上使用索引时,我遇到了同样的问题。原来我也必须使用 NOEXPAND 选项:

WITH (FORCESEEK, INDEX (IndexName),NOEXPAND)

https://technet.microsoft.com/en-us/library/bb510478%28v=sql.105%29.aspx

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 2010-11-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2011-04-13
    • 2013-01-03
    相关资源
    最近更新 更多