Скажем, у меня есть такая таблица:
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
Если бы я должен был сделать это:
insert into SomeTable(SomeString1, SomeString2)
values('foo', 'bar')
go
И посмотреть фактический план выполнения, я вижу только кластерную вставку индекса . Почему я не вижу вставку некластерного индекса в плане выполнения?
Я предполагаю, потому что, пока вы не достигнете определенного порога количества элементов и количества строк, не стоит поддерживать статистику для некластеризованного индекса. Если у вас есть одна строка в таблице, оптимизатор знает, что он не будет использовать этот индекс, поэтому он не поддерживает его.
—
JNK
@JNK Но если я это сделаю
select * from SomeTable where String1 = 'foo', то увижу, что оптимизатор запросов действительно выбирает индекс IX_SomeString1для поиска по индексу. Так что, должно быть, обновляется этот индекс, нет?
Вы можете посмотреть на статистику и посмотреть. Это также может быть недостатком в отображении плана выполнения. Вы проверили XML?
—
JNK
SQL Server может использовать широкий или узкий план в зависимости от количества строк. Это определяет, выполняются ли операции обслуживания индекса по отдельности и отображаются ли они в плане как отдельные операции или вместе, и отображаются ли они как часть операции CI.
—
Мартин Смит


