สมมติว่าฉันมีโต๊ะแบบนี้:
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
@JNK แต่ถ้าฉันทำ
select * from SomeTable where String1 = 'foo'แล้วฉันเห็นว่าจริง ๆ แล้วเครื่องมือเพิ่มประสิทธิภาพการสืบค้นจะเลือกดัชนีIX_SomeString1สำหรับการค้นหาดัชนี ดังนั้นจะต้องมีการอัพเดทดัชนีนั้นเหรอ?
คุณสามารถดูสถิติของมันและดู อาจเป็นข้อบกพร่องในการแสดงแผนปฏิบัติการเช่นกัน คุณตรวจสอบ xml แล้วหรือยัง
—
JNK
SQL Server สามารถใช้แผนแบบกว้างหรือแบบแคบขึ้นอยู่กับจำนวนแถวที่ได้รับผลกระทบ สิ่งนี้จะควบคุมว่าการดำเนินการบำรุงรักษาดัชนีจะเกิดขึ้นแยกกันหรือไม่และจะแสดงในแผนเป็นการดำเนินการแยกกันหรือรวมกันและแสดงเป็นส่วนหนึ่งของการดำเนินการ CI
—
Martin Smith


