2016-06-07 4 views
1

나는 차 키를 사용하여 아래 표를 만들었습니다 아래의 쿼리에서 인덱스가 작동하는 방식은 무엇입니까?

create table test2 
(id int primary key,name varchar(20)) 

insert into test2 values 
(1,'mahesh'),(2,'ram'),(3,'sham') 

는 다음에 클러스터되지 않은 인덱스를 만들었습니다.

create nonclustered index ind_non_name on test2(name) 

쿼리를 작성할 때 쿼리 실행 계획에서 항상 클러스터되지 않은 인덱스가 사용됩니다.

테이블에 클러스터 된 인덱스가있는 경우에도 항상 클러스터되지 않은 인덱스를 사용하는 이유를 이해해 주시겠습니까?

미리 감사드립니다.

답변

0

클러스터 된 인덱스에도 데이터가 포함되어 있고 클러스터형 인덱스가 id, name이고 클러스터되지 않은 인덱스에 클러스터링 키가 포함되어 있으므로 클러스터되지 않은 인덱스가 name, id이되므로 색인은 거의 같습니다.

검색 조건이 없으므로 어떤 인덱스를 사용하든 관계없이 완전히 스캔해야하므로 실제로 클러스터형 인덱스를 사용해야하는 이유는 무엇입니까?

테이블을 세 번째 필드에 추가하면 select *은 클러스터 된 인덱스를 사용합니다.

0

1 차 키를 클러스터링 키와 혼동하고 있습니다. 그들은 동일하지 않습니다. 명시 적으로 클러스터링 키를 작성해야합니다. 당신은 비를 만들 때 기본적으로

ALTER TABLE test2 
ADD CONSTRAINT PK_ID_test2 primary key clustered(id) 
+3

기본 키는 클러스터되지 않은 것으로 명시 적으로 만들어지지 않는 한 기본적으로 클러스터됩니다. –

+0

나는 그럴 것이라고 생각했지만 참고 문헌을 찾는 데 어려움이 있었다. 나는 OP와 다른 사람들이 특히 당신의 의견을 볼 수 있도록 여기에 남겨 둘 것입니다. –

+0

https://technet.microsoft.com/ko-kr/library/aa933131%28v=sql.80%29.aspx - SQL Server 2000과 유사하지만 변경되지 않았습니다. 물론 sp_help로 볼 수 있습니다. –

1

:

create table test2 
(id int ,name varchar(20) 
constraint PK_ID_test2 primary key clustered(id)) 

당신이 이미 가지고있는 것에 클러스터링 키를 추가하려면 :

는 생성 문에 기본 키에 클러스터링 키를 만들려면 이름에 클러스터 된 인덱스, 인덱스는 실제로 이름과 ID를 포함하므로 모든 테이블 자체를 포함합니다. 이 같은 다른 필드를 추가하는 경우 :

create table test4 
(id int primary key clustered,name varchar(20), name2 varchar(20)) 

insert into test4 values 
(1,'mahesh','mahesh'),(2,'ram','mahesh'),(3,'sham','mahesh') 

create nonclustered index ind_non_name on test4(name) 

당신은 쿼리의 일부는 클러스터 된 인덱스를 사용하기 시작 것을 볼 수 있습니다.

관련 문제