什么是非聚集索引扫描

Sta*_*ser 5 index sql-server-2008 sql-server sql-server-2008-r2 nonclustered-index

我知道什么是表扫描、聚集索引扫描和索引查找,但我的谷歌技能让我无法找到非聚集索引扫描的精确解释。为什么以及何时查询使用非聚集索引扫描?

谢谢你。

Aar*_*and 8

在这种情况下可以选择非聚集索引扫描:

  1. 优化器确定扫描所有行比执行查找/范围扫描更便宜
  2. 非聚集索引比聚集索引“更瘦”
  3. 非聚集仍然覆盖查询所需的列(或者它覆盖了足够多的列并且查找剩余的列仍然比聚集索引扫描便宜)

显然,如果您有一个堆(没有聚集索引)并且 3. 仍然是正确的,它也可能发生。

这并不是一个详尽的列表——还有其他情况可以选择非聚集索引扫描,但这可能是最常见的。

  • 不应该在那里选择非聚集索引扫描,除非有很多行与特定名称匹配(或统计数据偏离基准)。对于几行,在 name 列上进行索引查找并结合查找以获取 `*` 中的其他列可能更有意义。但是,除非故事有更多内容,否则我不明白为什么在这种情况下会选择非聚集索引扫描。 (2认同)