我有一个包含大约 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索引?
查询计划链接: