비 클러스터형 인덱스 삽입


10

다음과 같은 테이블이 있다고 가정 해보십시오.

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인덱스 탐색을 위해 인덱스 를 선택한다는 것을 알 수 있습니다 . 따라서 해당 인덱스를 업데이트해야합니다.

1
당신은 그것에 대한 통계를보고 볼 수 있습니다. 실행 계획 표시에도 단점이있을 수 있습니다. XML을 확인 했습니까?
JNK

1
SQL Server 는 영향을받는 행 수에 따라 넓거나 좁은 계획을 사용할 수 있습니다 . 이는 인덱스 유지 보수 조작이 개별적으로 발생하고 계획에서 개별 조작으로 표시되거나 함께 표시되어 CI 조작의 일부로 표시되는지 여부를 제어합니다.
Martin Smith

1
@MartinSmith 훌륭한 설명과 나는 그것을 몰랐습니다. 링크와 의견에 감사드립니다. 대답이되어야한다고 생각합니다.

답변:


9

단일 행 삽입의 경우 좁은 / 행당 계획을 얻습니다.

INSERT INTO SomeTable(SomeString1, SomeString2)
SELECT TOP 1 type, type
FROM master..spt_values

좁은 계획

클러스터형 인덱스 삽입 연산자를 선택하고 속성 창을 보면 XML에 표시된 것과 동일한 정보를 볼 수 있습니다.

속성 창

1,000 행을 시도하면

INSERT INTO SomeTable(SomeString1, SomeString2)
SELECT TOP 1000 type, type
FROM master..spt_values

작업이 개별적으로 분리 된 다른 와이드 / 인덱스 계획을 얻습니다

넓은 계획

참조 넓은 대 좁은 계획 또는 크레이그 프리드먼의 블로그를 두에 대한 자세한 내용은


6

그래픽 계획 디스플레이를 절대 믿지 마십시오. 초보자 전용입니다. 전문가는 항상 XML을 봅니다. NC 작업이 바로 있습니다 :

<Update DMLRequestSort="false">
  <Object Database="[testdb]" Schema="[dbo]" Table="[SomeTable]" Index="[PK__SomeTabl__3213E83F4AAF1C98]" IndexKind="Clustered" />
  <Object Database="[testdb]" Schema="[dbo]" Table="[SomeTable]" Index="[IX_SomeString1]" IndexKind="NonClustered" />

5
나는 그것이 "신입생만을위한"것이라고 길게 말하지 않을 것이다.
Dave Markle

나의 '최신'의견은 시청자의 기술에 관한 것이 아니라 경험에 관한 것입니다. 그래픽 계획의 자유 주의적 '생략'에 의해 불에 탔던 사람들은 그것을 신뢰하는 것보다 더 잘 알고 있습니다. 이것은 교착 상태 그래프에 훨씬 더 적용됩니다 .
Remus Rusanu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.