programing

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

magicmemo 2023. 5. 26. 20:50
반응형

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

어 나TABLE클러스터된 인덱스가 없는 기본 키가 있습니까?

그리고 카나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! 사이트 전체를 읽어보고 무슨 일이 일어나고 있는지 정말로 이해하는 것을 추천합니다.

자, 질문을 드리자면...


Clustered Index 없이 TABLE에 기본 키를 사용할 수 있습니까?

예, 기본 키를 선언하여 힙 기반 테이블을 만들 때 NONClustered 키워드를 사용합니다.예:

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

많은 경우 힙 기반 테이블이 실제로 더 낫지만(링크된 기사에서 설명한 것처럼) 많은 사람들이 기본값(Clustered)만 수락하는 것처럼 보이기 때문에 이는 유감스러운 일입니다.


기본 키 없이도 TABLE에 클러스터된 인덱스를 사용할 수 있습니까?

다른 DBMSes와 달리 MS SQL Server는 기본 키와 다르거나 기본 키가 전혀 없는 클러스터링 인덱스를 사용할 수 있도록 합니다.

다음 예제에서는 PK와 별도로 PK 위에 고유한 제약 조건이 있는 클러스터링 인덱스를 생성합니다. 이는 대부분의 경우에 필요한 것입니다.

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 서버에서는 기본 키도 클러스터됩니다.위에서 설명한 대로 기본값을 변경할 수 있습니다.

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

클러스터된 색인 없이 TABLE에 기본 키가 있을있습니까? - 네.

기본 없이 TABLE에 클러스터된 인덱스를 사용할 수 있습니까? - 네.

기본 키는 값의 고유성을 보장하는 제약 조건으로, 행은 항상 해당 키로 구체적으로 식별될 수 있습니다.

인덱스는 자동으로 기본 키에 할당됩니다(행은 종종 기본 키로 "찾아보기"됨).

비클러스터형 인덱스는 열 중 하나 이상의 행을 논리적으로 정렬한 것입니다.인덱스가 교차하는 열에 따라 정렬된 테이블의 또 다른 "복사본"으로 간주합니다.

군집화된 인덱스실제 테이블이 특정 열에 의해 물리적으로 정렬된 경우입니다.테이블에 항상 클러스터된 인덱스가 있는 것은 아닙니다(다른 테이블에 의해 물리적으로 정렬된 경우 해당 인덱스가 정의되지 않은 경우도 있음).단일 복합 클러스터 인덱스(예: 성, 이름, DOB 순으로 테이블이 물리적으로 정렬됨)를 가질 수 있지만 테이블에는 둘 이상의 클러스터 인덱스를 가질 수 없습니다.

PK는 클러스터된 인덱스인 경우가 많지만 항상 그런 것은 아닙니다.

MS SQL Server에서 기본 키의 모든 열은 NOT Null로 정의되어야 하지만 고유한 클러스터 인덱스를 생성할 필요는 없습니다.하지만 다른 DB 시스템은 잘 모르겠습니다.

이 질문에 대한 답변과 관련이 없을 수도 있지만 기본 키 및 클러스터된 인덱스에 대한 몇 가지 중요한 측면은 ->

클러스터된 인덱스에 기본 키(기본적으로 클러스터된 인덱스이지만 이 키를 변경할 수 있음)가 있으면 해당 테이블에 대해 클러스터된 인덱스를 하나 더 만들 수 없습니다.그러나 아직 기본 키 집합이 없고 클러스터된 인덱스가 있으면 클러스터된 인덱스로 기본 키를 만들 수 없습니다.

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

반응형