10 sql-server
假设我有一张这样的表:
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
Run Code Online (Sandbox Code Playgroud)
如果我要这样做:
insert into SomeTable(SomeString1, SomeString2)
values('foo', 'bar')
go
Run Code Online (Sandbox Code Playgroud)
并查看实际执行计划,我只看到一个Clustered Index Insert。为什么我在执行计划中没有看到非聚集索引插入?
对于单行插入,您会得到一个窄/每行计划
INSERT INTO SomeTable(SomeString1, SomeString2)
SELECT TOP 1 type, type
FROM master..spt_values
Run Code Online (Sandbox Code Playgroud)

如果您选择 Clustered Index Insert Operator 并查看属性窗口,您可以看到与 XML 中显示的信息相同的信息。
如果您尝试 1,000 行
INSERT INTO SomeTable(SomeString1, SomeString2)
SELECT TOP 1000 type, type
FROM master..spt_values
Run Code Online (Sandbox Code Playgroud)
您将获得不同的广泛/每个索引计划,并将操作分开
有关两者的更多信息,请参阅Wide vs. Narrow Plans或Craig Freedman 的博客
永远不要相信图形计划显示,仅适用于新手。优点总是查看 XML。NC 操作就在那里:
<Update DMLRequestSort="false">
<Object Database="[testdb]" Schema="[dbo]" Table="[SomeTable]" Index="[PK__SomeTabl__3213E83F4AAF1C98]" IndexKind="Clustered" />
<Object Database="[testdb]" Schema="[dbo]" Table="[SomeTable]" Index="[IX_SomeString1]" IndexKind="NonClustered" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
989 次 |
| 最近记录: |