Programing

기본 키와 클러스터형 인덱스의 관계

lottogame 2020. 10. 8. 07:37
반응형

기본 키와 클러스터형 인덱스의 관계


TABLE은 Clustered Index없이 기본 키를 가질 수 있습니까?

TABLE은 기본 키없이 클러스터형 인덱스를 가질 수 있습니까?

누구든지 기본 키와 클러스터형 인덱스의 관계를 간단히 말해 줄 수 있습니까?


기본 키는 논리적 개념이며 테이블의 행에 대한 고유 식별자입니다. 따라서 많은 속성이 있습니다. null이 아닐 수 있으며 고유해야합니다. 물론 고유 식별자로 레코드를 많이 검색 할 가능성이 높기 때문에 기본 키에 대한 인덱스를 갖는 것이 좋습니다.

클러스터형 인덱스는 물리적 개념으로 레코드가 디스크에 저장되는 순서에 영향을주는 인덱스입니다. 이렇게하면 데이터에 액세스 할 때 매우 빠른 인덱스가되지만 기본 키가 순차 번호가 아닌 경우 쓰기 속도가 느려질 수 있습니다.

예, 클러스터 된 인덱스없이 기본 키를 가질 수 있습니다. 때로는 원할 수 있습니다 (예 : 기본 키가 조인 테이블의 외래 키 조합이고 디스크 셔플 오버 헤드를 발생시키지 않으려는 경우) 쓸 때).

예, 기본 키가 아닌 열에 클러스터형 인덱스를 만들 수 있습니다.


테이블에는 클러스터되지 않은 기본 키가있을 수 있으며 클러스터 된 테이블에는 기본 키가 필요하지 않습니다. 그래서 두 질문에 대한 답은 '예'입니다.

클러스터형 인덱스는 모든 열을 리프 수준에 저장합니다. 즉, 클러스터형 인덱스에는 테이블의 모든 데이터가 포함됩니다. 클러스터형 인덱스가없는 테이블을 힙이라고합니다.

기본 키는 기본적으로 클러스터 된 고유 인덱스입니다. 기본적으로 기본 키를 만들 때 테이블이 아직 클러스터되지 않은 경우 기본 키는 클러스터 된 고유 인덱스로 만들어집니다. nonclustered옵션 을 명시 적으로 지정하지 않는 한 .

예, 어디 t1클러스터되지 않은 기본 키를 가지고 있으며, t2클러스터되지 않은 있지만 기본 키가 :

create table t1 (id int not null, col1 int);
alter table t1 add constraint PK_T1 primary key nonclustered (id);
create clustered index IX_T1_COL1 on t1 (col1);

create table t2 (id int not null, col1 int);
alter table t2 add constraint PK_T2 primary key nonclustered (id);

SQL Fiddle의 예.


우선, 인덱스 구성 테이블 및 클러스터형 인덱스를 살펴보십시오 . 실제로 Use the Index Luke 전체를 읽는 것이 좋습니다 ! 처음부터 클러스터링 주제에 도달 할 때까지 사이트에서 진행 상황을 실제로 이해합니다.

자, 질문에 ...


TABLE은 Clustered Index없이 기본 키를 가질 수 있습니까?

예, 힙 기반 테이블을 만들기 위해 기본 키를 선언 할 때 NONCLUSTERED 키워드를 사용하십시오. 예를 들면 :

CREATE TABLE YOUR_TABLE (
    YOUR_PK int PRIMARY KEY NONCLUSTERED
    -- Other fields...
);

많은 경우에 힙 기반 테이블이 실제로 더 좋을지라도 (링크 된 기사에서 논의 된대로) 많은 사람들이 기본값 (클러스터 됨)을 받아들이는 것처럼 보이기 때문에 이것은 불행한 일입니다.


TABLE은 기본 키없이 클러스터형 인덱스를 가질 수 있습니까?

다른 DBMS와 달리 MS SQL Server는 기본 키와 다르거 나 기본 키가 전혀없는 클러스터링 인덱스를 가질 수 있습니다.

다음 예제는 PK와는 별도로 클러스터링 인덱스를 생성하며, 그 위에 UNIQUE 제약 조건이 있으며, 이는 대부분의 경우에 원할 것입니다.

CREATE TABLE YOUR_TABLE (
    YOUR_PK int PRIMARY KEY,
    YOUR_CLUSTERED_KEY int NOT NULL UNIQUE CLUSTERED
    -- Other fields...
);

고유하지 않은 클러스터링 인덱스 (사용 CREATE CLUSTERED INDEX ...)를 선택하면 MS SQL Server가 숨겨진 필드를 추가하여 자동으로 고유하게 만듭니다.

클러스터링의 이점은 범위 스캔에서 가장 잘 나타납니다. 클라이언트 애플리케이션이 수행 한 범위 스캔과 "정렬"되지 않는 클러스터링 인덱스를 사용하는 경우 (예 : 위에서 언급 한 숨겨진 열에 과도하게 의존하거나 대리 키 에 클러스터링하는 경우 ) 클러스터링의 목적을 무너 뜨립니다.


누구든지 기본 키와 클러스터형 인덱스의 관계를 간단히 말해 줄 수 있습니까?

MS SQL Server에서는 기본 키도 기본적으로 클러스터링 됩니다 . 위에서 설명한대로 기본값을 변경할 수 있습니다.


클러스터형 인덱스를 사용하여 MSDN 에서 가져온 답변

TABLE은 Clustered Index없이 기본 키를 가질 수 있습니까? - 예.

TABLE은 기본 키없이 클러스터형 인덱스를 가질 수 있습니까? - 예.

기본 키는 A는 제약 보장하지만은 행이 항상 키에 의해 구체적으로 식별 할 수 있도록, 값의 고유성있다.

인덱스 (행이 종종 기본 키에 의해 "고개"대로) 자동으로 기본 키에 할당됩니다.

클러스터되지 않은 인덱스 의 열 중 하나 (또는 그 이상)에 의한 행의 논리적 순서입니다. 인덱스가있는 열에 따라 순서가 지정된 테이블의 또 다른 "복사본"이라고 생각하면됩니다.

A clustered index is when the actual table is physically ordered by a particular column. A table will not always have a clustered index (ie while it'll be physically ordered by something, that thing might be undefined). A table cannot have more than one clustered index, although it can have a single composite clustered index (ie the table is physically ordered by eg Surname, Firstname, DOB).

The PK is often (but not always) a clustered index.


For what it may be worth, in MS SQL Server all columns in the primary key must be defined as NOT Null, while creating unique clustered index does not require this. Not sure about other DB systems though.


It might not relate as answer to this question, but some important aspects on primary key and Clustered Indexes are ->

If there is a primary key (By Default Which is Clustered Index, however we can change that) with Clustered Index, then we can not create one more clustered index for that table. But if there is not a primary key set yet, and there is a clustered index, then we can't create a primary key with Clustered Index.

참고URL : https://stackoverflow.com/questions/15051869/relationship-of-primary-key-and-clustered-index

반응형