Powiedzmy, że mam taki stół:
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
Gdybym to zrobił:
insert into SomeTable(SomeString1, SomeString2)
values('foo', 'bar')
go
I zobacz aktualny plan wykonania, widzę tylko wstawkę indeksu klastrowego . Dlaczego nie widzę Wstawionego indeksu nieklastrowanego w planie wykonania?
select * from SomeTable where String1 = 'foo'
, to widzę, że optymalizator zapytań faktycznie wybiera indeksIX_SomeString1
do wyszukiwania indeksu. Więc to musi być aktualizacja tego indeksu, nie?Odpowiedzi:
W przypadku wkładki jednorzędowej otrzymujesz plan wąski / na wiersz
Po wybraniu operatora wstawiania indeksu klastrowanego i wyświetleniu okna właściwości można zobaczyć te same informacje, co pokazano w pliku XML.
Jeśli spróbujesz za 1000 wierszy
Otrzymujesz inny plan szeroki / na indeks, z oddzielnymi operacjami
Zobacz Wide vs. Narrow Plany lub blog Craiga Freedmana, aby uzyskać więcej informacji na temat tych dwóch
źródło
Nigdy nie ufaj wyświetlaniu graficznego planu, jest tylko dla początkujących. Profesjonaliści zawsze patrzą na XML. Operacja NC jest tutaj:
źródło