【问题标题】:WHERE clause on a clustered index AND a non-clustered index聚集索引和非聚集索引上的 WHERE 子句
【发布时间】:2019-02-13 18:16:28
【问题描述】:

我有一个带有两列条件的WHERE 子句:

WHERE A = 1 AND B = 2

A 列是聚集索引,而 B 列是非聚集索引。

我的问题是 - 在此特定查询中的 B 列上使用非聚集索引有什么好处?

【问题讨论】:

  • 您可以在查询中强制使用特定索引,并比较实际的执行计划以明确。

标签: sql-server


【解决方案1】:

在这种情况下,总是返回 0 或 1 条记录,因为默认情况下,尽管it is not required,集群索引是唯一的。如果聚集索引是唯一的,则 B 列是否有索引都无关紧要,它不会在此查询执行计划中使用。否则索引可以根据统计数据使用。

您可以通过阅读执行计划来验证这一点。

【讨论】:

  • 聚集索引可以是非唯一的。将为索引键列的重复值添加一个隐藏的“uniqifier”。
  • @DavidBrowne-Microsoft 如果 where 子句的形式为:Where A > 1 and B
  • @ashraydimri - 这取决于表和索引统计信息,然后根据这些统计信息以及传入的语句和参数选择什么查询计划。
猜你喜欢
  • 2011-03-25
  • 2013-08-07
  • 2021-01-14
  • 2012-08-26
  • 2016-01-05
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多