Saya tahu ketika harus menggunakan indeks atau scan tabel, SQL Server menggunakan statistik untuk melihat mana yang lebih baik.
Saya punya meja dengan 20 juta baris. Saya memiliki indeks pada (SnapshotKey, Measure) dan permintaan ini:
select Measure, SnapshotKey, MeasureBand
from t1
where Measure = 'FinanceFICOScore'
group by Measure, SnapshotKey, MeasureBand
Kueri mengembalikan 500r baris. Jadi kueri hanya memilih 2,5% dari baris tabel.
Pertanyaannya adalah mengapa SQL Server tidak menggunakan indeks nonclustered yang saya miliki, dan menggunakan pemindaian tabel sebagai gantinya?
Statistik diperbarui.
Baik untuk menyebutkan bahwa kinerja permintaan itu bagus.
Pemindaian Tabel
Indeks Paksa
Tabel / Struktur Indeks
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]
Tidak ada PK di atas meja, karena ini adalah gudang data.
CREATE NONCLUSTERED INDEX [nci_SnapshotKeyMeasure] ON [t1]
(
[SnapshotKey] ASC,
[Measure] ASC
)