Tôi biết khi nói đến việc sử dụng một chỉ mục hoặc quét bảng, SQL Server sử dụng số liệu thống kê để xem cái nào tốt hơn.
Tôi có một bảng với 20 triệu hàng. Tôi có một chỉ mục trên (SnapshotKey, Đo lường) và truy vấn này:
select Measure, SnapshotKey, MeasureBand
from t1
where Measure = 'FinanceFICOScore'
group by Measure, SnapshotKey, MeasureBand
Truy vấn trả về 500k hàng. Vì vậy, truy vấn chỉ chọn 2,5% số hàng của bảng.
Câu hỏi đặt ra là tại sao SQL Server không sử dụng chỉ mục không bao gồm mà tôi có và sử dụng quét bảng thay thế?
Thống kê được cập nhật.
Tốt để đề cập rằng hiệu suất truy vấn là tốt mặc dù.
Quét bảng
Chỉ số cưỡng bức
Cấu trúc bảng / chỉ mục
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]
Không có PK trên bàn, vì nó là kho dữ liệu.
CREATE NONCLUSTERED INDEX [nci_SnapshotKeyMeasure] ON [t1]
(
[SnapshotKey] ASC,
[Measure] ASC
)