说我有一张这样的桌子:
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 2012年
@JNK但是,如果我执行了
select * from SomeTable where String1 = 'foo'
,那么我看到查询优化器确实IX_SomeString1
为索引搜索选择了索引。因此,它必须更新该索引,不是吗?
您可以查看其统计信息并查看。在执行计划显示中也可能是一个缺点。您检查过xml吗?
—
JNK 2012年