다음과 같은 테이블이 있다고 가정 해보십시오.
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
실제 실행 계획을 보면 Clustered Index Insert 만 보입니다 . 실행 계획에 비 클러스터형 인덱스 삽입 이 표시 되지 않는 이유는 무엇 입니까?
특정 카디널리티 및 행 수 임계 값에 도달 할 때까지 비 클러스터형 인덱스에서 통계를 유지하는 것은 가치가 없기 때문에 추측하고 있습니다. 테이블에 단일 행이있는 경우 옵티마이 저는 해당 인덱스를 사용하지 않으므로 유지 관리하지 않는다는 것을 알고 있습니다.
—
JNK
@JNK 그러나을 수행
select * from SomeTable where String1 = 'foo'하면 쿼리 최적화 프로그램이 실제로 IX_SomeString1인덱스 탐색을 위해 인덱스 를 선택한다는 것을 알 수 있습니다 . 따라서 해당 인덱스를 업데이트해야합니다.
당신은 그것에 대한 통계를보고 볼 수 있습니다. 실행 계획 표시에도 단점이있을 수 있습니다. XML을 확인 했습니까?
—
JNK
SQL Server 는 영향을받는 행 수에 따라 넓거나 좁은 계획을 사용할 수 있습니다 . 이는 인덱스 유지 보수 조작이 개별적으로 발생하고 계획에서 개별 조작으로 표시되거나 함께 표시되어 CI 조작의 일부로 표시되는지 여부를 제어합니다.
—
Martin Smith


