Diyorum ki böyle bir tablo var:
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
Eğer bunu yapacaksam:
insert into SomeTable(SomeString1, SomeString2)
values('foo', 'bar')
go
Ve gerçek yürütme planını görmek, sadece bir Kümelenmiş Dizin Ekleme görüyorum . Yürütme planında neden Kümelenmemiş bir dizin eki görmüyorum ?
Tahmin ediyorum, çünkü belli bir kardinalite ve sıra sayımı eşiğine ulaşana kadar, kümelenmemiş endeksteki istatistikleri tutmaya değmez. Bir tabloda tek bir satır varsa, optimize edici bu dizini kullanmayacağını ve dolayısıyla bunu sürdürmeyeceğini bilir.
—
JNK
@JNK Ama bir yaparsam
select * from SomeTable where String1 = 'foo', o zaman sorgu optimizer aslında IX_SomeString1bir dizin arama için dizin seçin görüyorum . Yani bu dizini güncelliyor olmalı, değil mi?
Bunun istatistiklerine bakabilir ve görebilirsiniz. Yürütme planı ekranında da bir eksiklik olabilir. XML'i kontrol ettiniz mi?
—
JNK
SQL Server , etkilenen satır sayısına bağlı olarak geniş veya dar bir plan kullanabilir . Bu, dizin bakım işlemlerinin ayrı ayrı gerçekleşip gerçekleşmediğini ve planda ayrı işlemler olarak mı yoksa birlikte mi gösterileceğini ve CI işleminin bir parçası olarak gösterilip gösterilmeyeceğini denetler.
—
Martin Smith


