복붙노트

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

SQL

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

테이블은 클러스터 된 인덱스가없는 기본 키를 가질 수 있습니까?

그리고 테이블은 기본 키를하지 않고 클러스터 된 인덱스를 가질 수있다?

누구 짧게는 나에게 차 키와 클러스터 된 인덱스의 관계를 말할 수 있습니까?

해결법

  1. ==============================

    1.기본 키는 논리적 개념 - 그것은 테이블의 행에 대한 고유 식별자입니다. 따라서, 그것은 속성의 무리를 가지고 - 그것은 null이되지 않을 수도 있습니다, 그것은 고유해야합니다. 당신은 가능성이있어 같이 물론, 자신의 고유 한 식별자에 의해 기록을 위해 많이 검색하는, 기본 키에 인덱스를 가지고 좋은 것입니다.

    기본 키는 논리적 개념 - 그것은 테이블의 행에 대한 고유 식별자입니다. 따라서, 그것은 속성의 무리를 가지고 - 그것은 null이되지 않을 수도 있습니다, 그것은 고유해야합니다. 당신은 가능성이있어 같이 물론, 자신의 고유 한 식별자에 의해 기록을 위해 많이 검색하는, 기본 키에 인덱스를 가지고 좋은 것입니다.

    클러스터 된 인덱스는 물리적 개념이다 - 레코드가 디스크에 저장되는 순서에 영향을 미치는 인덱스입니다. 데이터에 액세스 할 때 기본 키가 일련 번호가 아닌 경우는 쓰기를 늦출 수 있지만 이것은, 그것은 매우 빠른 인덱스를 만든다.

    예, 클러스터 된 인덱스가없는 기본 키를 가질 수 있습니다 - 그리고 기본 키가 합류 테이블에 외래 키의 조합입니다 때 때때로, 당신은 예를 들어 (할 수 있습니다, 당신은 디스크 셔플 오버 헤드가 발생하지 않으 경우) 작성.

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

  2. ==============================

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

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

    A는 잎 수준 인덱스를 저장 모든 열을 클러스터. 즉, 클러스터 인덱스는 테이블의 모든 데이터를 포함합니다. 클러스터 된 인덱스가없는 테이블은 힙이라고합니다.

    기본 키는 기본적으로 클러스터 된 고유 인덱스입니다. 테이블이 아직 클러스터되지 않은 경우, 기본 키를 만들 때 기본 키가 클러스터 된 고유 인덱스로 생성됩니다 기본에 의해. 명시 적으로 클러스터되지 않은 옵션을 지정하지 않는 한.

    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 바이올린의 예.

  3. ==============================

    3.우선, 인덱스 구성 테이블과 클러스터 된 인덱스를보십시오. 사실, 나는 전체를 사용하여 인덱스 누가 복음을 읽어 보시기 바랍니다! 처음부터 사이트는 정말 무슨 일인지 이해에 클러스터링 항목에 도달 할 때까지.

    우선, 인덱스 구성 테이블과 클러스터 된 인덱스를보십시오. 사실, 나는 전체를 사용하여 인덱스 누가 복음을 읽어 보시기 바랍니다! 처음부터 사이트는 정말 무슨 일인지 이해에 클러스터링 항목에 도달 할 때까지.

    지금, 당신의 질문에 ...

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

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

    많은 사람들이 단지 (링크 된 문서에서 설명하는 것처럼) 많은 경우에 힙 기반 테이블이 실제로 더 나은 것에도 불구하고, (클러스터 된) 기본값을 사용하는 것 때문에 이것은 불행한 일이다.

    다른 DBMS의 달리, MS SQL Server는 기본 키에서, 또는 전혀 기본 키를하지 않고 다른 클러스터링 인덱스를 가질 수있게된다.

    다음 예는 아마 대부분의 경우에 싶을 것입니다 그것의 상단에 UNIQUE 제약 조건이있는 PK 별도의 클러스터링 인덱스를 생성합니다 :

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

    당신이 (클러스터 된 인덱스를 ... CREATE 사용) 고유하지 않은 클러스터링 인덱스를 선택하면, MS SQL 서버에 자동으로 숨겨진 필드를 추가하여 고유하게됩니다.

    클러스터링의 혜택 범위 스캔을위한 가장 눈에 띄는 유의하시기 바랍니다. (예 : 대리 키에 숨겨진 열을 과도하게 의존 위에서 언급 한, 또는 클러스터링 경우와 같이) (들) 클라이언트 응용 프로그램에 의해 수행 범위 스캔으로 "정렬"을하지 않는 클러스터링 인덱스를 사용하는 경우, 당신은 꽤 많이 있습니다 클러스터링의 목적을 물리 치고.

    MS SQL 서버에서 기본 키는 기본적으로 클러스터됩니다. 전술 한 바와 같이, 그 기본값을 변경할 수 있습니다.

  4. ==============================

    4.답변 클러스터 된 인덱스를 사용하여 MSDN에서 촬영

    답변 클러스터 된 인덱스를 사용하여 MSDN에서 촬영

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

    테이블에는 기본 키없이 클러스터 된 인덱스를 가질 수 있습니까? - 예.

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

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

    비 클러스터형 인덱스는 열 중 하나 (또는 ​​그 이상)에 의한 행의 논리적 순서입니다. 인덱스가 건너 무엇이든 열을 기준으로 정렬 된 테이블의 효율적 또 다른 "복사"로 생각하십시오.

    실제 테이블이 물리적으로 특정 열을 기준으로 정렬 될 때 클러스터 된 인덱스입니다. 테이블은 항상 (물리적으로 무언가에 의해 정렬됩니다 동안 즉, 그 일이 정의되지 않은 수 있습니다) 클러스터 된 인덱스가되지 않습니다. 그것은 하나의 복합 클러스터 된 인덱스를 가질 수 있지만, 테이블은 하나 이상의 클러스터 된 인덱스를 가질 수 없습니다 (즉, 테이블은 물리적으로 예를 들어 성, 이름, 생년월일에 의해 정렬됩니다).

    약동학은 (항상 아니지만) 종종 클러스터 된 인덱스입니다.

  5. ==============================

    5.고유 클러스터 인덱스를 생성하는이 필요하지 않습니다 동안이 될 수있다 어떤 가치를 들어, MS SQL Server의 기본 키의 모든 열은 NOT NULL로 정의해야합니다. 확실하지하지만 다른 DB 시스템에 대한.

    고유 클러스터 인덱스를 생성하는이 필요하지 않습니다 동안이 될 수있다 어떤 가치를 들어, MS SQL Server의 기본 키의 모든 열은 NOT NULL로 정의해야합니다. 확실하지하지만 다른 DB 시스템에 대한.

  6. ==============================

    6.그것은이 질문에 대한 대답은 관련이 있지만하지 않을 수 있습니다 기본 키 및 클러스터 된 인덱스에 대한 몇 가지 중요한 측면은 ->

    그것은이 질문에 대한 대답은 관련이 있지만하지 않을 수 있습니다 기본 키 및 클러스터 된 인덱스에 대한 몇 가지 중요한 측면은 ->

    클러스터 된 인덱스와 (클러스터 된 인덱스입니다 그러나 기본적으로 우리가 변경할 수 있습니다) 기본 키가있는 경우, 우리는 그 테이블에 대한 또 하나의 클러스터 된 인덱스를 만들 수 없습니다. 아직 기본 키 세트가없는, 그리고 클러스터 된 인덱스가있는 경우에, 우리는 클러스터 된 인덱스와 기본 키를 만들 수 없습니다.

  7. from https://stackoverflow.com/questions/15051869/relationship-of-primary-key-and-clustered-index by cc-by-sa and MIT license