次のようなテーブルがあるとします。
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年
SQL Serverでは、影響を受ける行の数に応じて、幅の広いプランまたは幅の狭いプランを使用できます。これは、インデックスメンテナンス操作が個別に発生し、プランに個別の操作として表示されるか、一緒にCI操作の一部として表示されるかを制御します。
—
マーティン・スミス


