Angenommen, ich habe einen Tisch wie diesen:
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
Wenn ich das tun würde:
insert into SomeTable(SomeString1, SomeString2)
values('foo', 'bar')
go
Und wenn Sie den tatsächlichen Ausführungsplan anzeigen, wird nur ein Clustered Index Insert angezeigt . Warum wird im Ausführungsplan keine nicht gruppierte Indexeinfügung angezeigt ?
select * from SomeTable where String1 = 'foo'
, dann sehe ich, dass der Abfrageoptimierer tatsächlich den IndexIX_SomeString1
für eine Indexsuche auswählt . Also muss es diesen Index aktualisieren, nein?Antworten:
Für eine einzelne Zeileneinfügung erhalten Sie einen schmalen Plan pro Zeile
Wenn Sie den Operator zum Einfügen von Clustered-Indizes auswählen und das Eigenschaftenfenster anzeigen, werden dieselben Informationen wie im XML angezeigt.
Wenn Sie versuchen, 1.000 Zeilen
Sie erhalten einen anderen Wide / Pro-Index-Plan, bei dem die Vorgänge separat aufgeteilt werden
Weitere Informationen zu den beiden finden Sie in Wide vs. Narrow Plans oder in Craig Freedmans Blog
quelle
Vertrauen Sie niemals der grafischen Plananzeige, sondern nur für Neulinge. Profis schauen immer auf das XML. Die NC-Operation ist genau dort:
quelle