SQL 服务器索引使用情况取决于列值



我有一个巨大的表格(它有超过 40 英里的记录(和其中一列的索引。该列是引用列 - 类型Id。

我遇到了一个问题,在使用不同的列值过滤该列上的数据时,有时正在使用索引,有时不使用索引。

例如,简单地运行:

select * from LargeNumberOfItemsTable where typeid=4

使 SQL Server 使用索引,但

select * from LargeNumberOfItemsTable where typeid=3

不使用索引。

不使用索引时,查询需要很长时间,但是当我强制提示应该使用索引时,只需几秒钟即可运行它。

奇怪的是,统计数据已经更新,索引已经重建。

有没有人知道,为什么会发生这种行为?我正在寻找一些提示在哪里寻找原因。

SQL Server 根据估计的行计数选择计划。如果估计的行计数准确,则全表扫描与查找和键查找所需的时间将在很大程度上取决于您的硬件和可用资源。

确保使用 MAXDOP 1 重建索引。否则,无序扩展数据块将降低预读扫描的好处,导致在未缓存数据时,具有扫描的计划性能更差。

相关内容

最新更新