Sé que cuando se trata de usar un índice o un escaneo de tabla, SQL Server usa estadísticas para ver cuál es mejor.
Tengo una mesa con 20 millones de filas. Tengo un índice en (SnapshotKey, Measure) y esta consulta:
select Measure, SnapshotKey, MeasureBand
from t1
where Measure = 'FinanceFICOScore'
group by Measure, SnapshotKey, MeasureBand
La consulta devuelve 500k filas. Por lo tanto, la consulta selecciona solo el 2.5% de las filas de la tabla.
La pregunta es por qué SQL Server no usa el índice no agrupado que tengo, y usa un escaneo de tabla.
Las estadísticas se actualizan.
Es bueno mencionar que el rendimiento de la consulta es bueno.
Escaneo de tabla
Índice forzado
Estructura de tabla / í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]
No hay PK en la mesa, ya que es un almacén de datos.
CREATE NONCLUSTERED INDEX [nci_SnapshotKeyMeasure] ON [t1]
(
[SnapshotKey] ASC,
[Measure] ASC
)