SQL Server 不使用非聚集索引

lbe*_*ski 5 index sql-server t-sql

我有一个包含大约 4.7 亿行的表格。我想根据日期选择数据。我在这个表上创建了两个索引。一个是聚集的,另一个是非聚集在日期列上的(日期存储为 INT)。我有简单的选择语句:

select *
from big_table
where [date] BETWEEN 20200820 AND 20200828
Run Code Online (Sandbox Code Playgroud)

问题是查询计划使用聚集索引扫描而不是非聚集搜索+keylookup。计划如下: 不使用聚集索引计划

查询计划中生成的估计很好,统计信息是最新的。此日期范围应提供大约 500 万行。当我提供索引提示时,这个选择会在几秒钟内完成 - 没有提示需要几分钟才能完成。

这是 SQL Server 2019,一般来说,我注意到 db 更喜欢使用非聚集 + keylookups 的聚集索引扫描,即使在更大的表上也是如此。

我宁愿不使用提示,因为:

  • 有时我选择更广泛的范围,聚集索引扫描应该是可取的
  • 表在视图中使用,我无法向视图提供索引提示

有没有解释为什么db在这种情况下不使用NC索引?

查询计划链接: