我知道使用索引或表扫描时,SQL Server使用统计信息来查看哪个更好。
我有一个2000万行的表。我在(SnapshotKey,Measure)上有一个索引,并且此查询:
select Measure, SnapshotKey, MeasureBand
from t1
where Measure = 'FinanceFICOScore'
group by Measure, SnapshotKey, MeasureBand
查询返回500k行。因此,查询仅选择表的2.5%的行。
问题是为什么SQL Server不使用我拥有的非聚集索引,而是使用表扫描?
统计信息已更新。
值得一提的是查询性能还是不错的。
表扫描
强制索引
表/索引结构
CREATE TABLE [t1](
[SnapshotKey] [int] NOT NULL,
[SnapshotDt] [date] NOT NULL,
[Measure] [nvarchar](30) NOT NULL,
[MeasureBand] [nvarchar](30) NOT NULL,
-- and many more fields
) ON [PRIMARY]
桌上没有PK,因为它是数据仓库。
CREATE NONCLUSTERED INDEX [nci_SnapshotKeyMeasure] ON [t1]
(
[SnapshotKey] ASC,
[Measure] ASC
)