Eu sei que quando se trata de usar um índice ou uma verificação de tabela, o SQL Server usa estatísticas para ver qual é o melhor.
Eu tenho uma mesa com 20 milhões de linhas. Eu tenho um índice em (SnapshotKey, Measure) e esta consulta:
select Measure, SnapshotKey, MeasureBand
from t1
where Measure = 'FinanceFICOScore'
group by Measure, SnapshotKey, MeasureBand
A consulta retorna 500k linhas. Portanto, a consulta seleciona apenas 2,5% das linhas da tabela.
A questão é por que o SQL Server não usa o índice não clusterizado que eu tenho e, em vez disso, usa uma verificação de tabela?
As estatísticas são atualizadas.
É bom mencionar que o desempenho da consulta é bom.
Digitalização de mesa
Índice Forçado
Estrutura da tabela / índice
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]
Não há PK na tabela, pois é um data warehouse.
CREATE NONCLUSTERED INDEX [nci_SnapshotKeyMeasure] ON [t1]
(
[SnapshotKey] ASC,
[Measure] ASC
)