Ich weiß, wenn es um die Verwendung eines Index- oder Tabellenscans geht, verwendet SQL Server Statistiken, um festzustellen, welcher besser ist.
Ich habe eine Tabelle mit 20 Millionen Zeilen. Ich habe einen Index für (SnapshotKey, Measure) und diese Abfrage:
select Measure, SnapshotKey, MeasureBand
from t1
where Measure = 'FinanceFICOScore'
group by Measure, SnapshotKey, MeasureBand
Die Abfrage gibt 500.000 Zeilen zurück. Die Abfrage wählt also nur 2,5% der Zeilen der Tabelle aus.
Die Frage ist, warum SQL Server nicht den nicht gruppierten Index verwendet, den ich habe, und stattdessen einen Tabellenscan verwendet.
Statistiken werden aktualisiert.
Gut zu erwähnen, dass die Abfrageleistung jedoch gut ist.
Tabellenscan
Erzwungener Index
Tabellen- / Indexstruktur
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]
Keine PK auf dem Tisch, da es sich um ein Data Warehouse handelt.
CREATE NONCLUSTERED INDEX [nci_SnapshotKeyMeasure] ON [t1]
(
[SnapshotKey] ASC,
[Measure] ASC
)