Nói rằng tôi có một bảng như thế này:
create table SomeTable
(
id int identity(1, 1) not null primary key clustered,
SomeString1 varchar(50) not null,
SomeString2 varchar(50) not null
)
go
create nonclustered index IX_SomeString1
on SomeTable(SomeString1)
go
Nếu tôi phải làm điều này:
insert into SomeTable(SomeString1, SomeString2)
values('foo', 'bar')
go
Và xem kế hoạch thực hiện thực tế, tôi chỉ thấy một Chèn chỉ mục cụm . Tại sao tôi không thấy Chỉ mục không được chèn trong kế hoạch thực hiện?
Tôi đoán bởi vì cho đến khi bạn đạt một ngưỡng số lượng và số lượng hàng nhất định, sẽ không đáng để duy trì các số liệu thống kê về chỉ số không bao gồm. Nếu bạn có một hàng trong một bảng, trình tối ưu hóa sẽ biết rằng nó sẽ không sử dụng chỉ mục đó nên sẽ không duy trì nó.
—
JNK
@JNK Nhưng nếu tôi làm a
select * from SomeTable where String1 = 'foo', thì tôi thấy rằng trình tối ưu hóa truy vấn thực tế chọn chỉ mục IX_SomeString1cho tìm kiếm chỉ mục. Vì vậy, nó phải được cập nhật chỉ số đó, không?
Bạn có thể nhìn vào số liệu thống kê cho nó và xem. Nó cũng có thể là một thiếu sót trong màn hình kế hoạch thực hiện. Bạn đã kiểm tra xml chưa?
—
JNK
SQL Server có thể sử dụng một kế hoạch rộng hoặc hẹp tùy thuộc vào số lượng hàng bị ảnh hưởng. Điều này kiểm soát xem các hoạt động bảo trì chỉ mục có xảy ra riêng biệt và được hiển thị trong kế hoạch dưới dạng các hoạt động riêng biệt hoặc cùng nhau và hiển thị như một phần của hoạt động CI.
—
Martin Smith


