So che quando si tratta di utilizzare un indice o una scansione di tabelle, SQL Server utilizza le statistiche per vedere quale è meglio.
Ho una tabella con 20 milioni di righe. Ho un indice su (SnapshotKey, Measure) e questa query:
select Measure, SnapshotKey, MeasureBand
from t1
where Measure = 'FinanceFICOScore'
group by Measure, SnapshotKey, MeasureBand
La query restituisce 500k righe. Quindi la query seleziona solo il 2,5% delle righe della tabella.
La domanda è perché SQL Server non utilizza l'indice non cluster che ho e utilizza invece una scansione di tabella?
Le statistiche sono aggiornate.
Buono a dirsi che le prestazioni della query sono buone però.
Scansione tabella
Indice forzato
Struttura tabella / indice
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]
Nessun PK sul tavolo, in quanto è un data warehouse.
CREATE NONCLUSTERED INDEX [nci_SnapshotKeyMeasure] ON [t1]
(
[SnapshotKey] ASC,
[Measure] ASC
)