Скажем, у меня есть такая таблица:
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
И посмотреть фактический план выполнения, я вижу только кластерную вставку индекса . Почему я не вижу вставку некластерного индекса в плане выполнения?
select * from SomeTable where String1 = 'foo'
, то увижу, что оптимизатор запросов действительно выбирает индексIX_SomeString1
для поиска по индексу. Так что, должно быть, обновляется этот индекс, нет?Ответы:
Для вставки в один ряд вы получаете узкий план / план на ряд
Если вы выберете оператор вставки кластерного индекса и откроете окно свойств, вы увидите ту же информацию, что и в XML.
Если вы попытаетесь на 1000 строк
Вы получаете другой широкий / индексный план с раздельными операциями
Посмотрите Широкие против Узких Планов или блог Крэйга Фридмана для получения дополнительной информации о двух
источник
Никогда не доверяйте графическому отображению плана, это только для новичков. Плюсы всегда смотрят на XML. Операция ЧПУ прямо здесь:
источник