2016-12-22 13 views
2

CREATE TABLE 문 내에서 사용하는 자습서에서 배우고 있지만 클러스터 된지 또는 클러스터되지 않은지에 대해서는 설명하지 않습니다. 내 질문 : INDEX()CREATE TABLE 문을 사용하면 클러스터 된 인덱스 또는 클러스터되지 않은 인덱스가 생성됩니까? 예를 들어INDEX()는 MySQL에서 클러스터형 또는 비 클러스터형 인덱스를 생성합니까?

:

CREATE TABLE test (a varchar(30), b varchar(30), index(a)); 

/* Is column A a clustered or non-clustered index? */ 

또한 얼마나뿐만 아니라 반대를 할 궁금 : 클러스터되지 않은 인덱스의 예 결과, 어떻게 그 반대의 경우도 마찬가지 클러스터 된 인덱스를 작성하고 경우?

+1

아니요 .... 그냥 기본 키가 "클러스터 된" – Hackerman

답변

4

TL; DR 기본 키 - 기본 키 -은 클러스터 된 인덱스입니다. 기본 키를 명시 적으로 정의하지 않으면 첫 번째로 적합한 UNIQUE 키가 사용됩니다. 기본 키 또는 UNIQUE 키가없는 경우 MySQL은 숨겨진 클러스터 된 인덱스를 생성합니다. INDEX()을 사용하여 클러스터 된 인덱스를 만들 수 없습니다.

explained in the docs (강조 추가)로 :

모든 InnoDB의 테이블이 행에 대한 데이터가 저장되는 클러스터 된 인덱스라는 특별한 인덱스가 있습니다. 일반적으로 클러스터형 인덱스는 기본 키와 동의어입니다.

...

  • 당신이 당신의 테이블에 PRIMARY KEY을 정의, InnoDB는 클러스터 된 인덱스로 사용합니다. 작성하는 각 테이블에 대한 기본 키를 정의하십시오. 논리 고유의 널이 아닌 열 또는 열 집합이없는 경우 값이 자동으로 채워지는 새로운 자동 증가 열을 추가하십시오.

  • 당신이 당신의 테이블에 대한 PRIMARY KEY을 정의하지 않는 경우는, MySQL은 모든 키 열이 NOT NULL를하고 InnoDB하지만 클러스터 된 인덱스로 사용하는 첫 번째 UNIQUE 인덱스를 찾습니다. 테이블에는 PRIMARY KEY 또는 적합한 UNIQUE 인덱스가 없으면

  • 는 이노 내부 행 ID 값을 포함하는 합성 열 숨겨진 클러스터 된 인덱스를 생성한다. 행은 InnoDB가 그러한 테이블의 행에 할당 한 ID로 정렬됩니다. 행 ID는 새로운 행이 삽입 될 때 단조롭게 증가하는 6 바이트 필드입니다. 따라서 행 ID로 정렬 된 행은 물리적으로 삽입 순서입니다. 클러스터 된 인덱스가 아닌 다른

...

모든 인덱스는 보조 인덱스로 알려져 있습니다. InnoDB에서, 2 차 인덱스의 각 레코드에는 2 차 인덱스에 지정된 컬럼뿐만 아니라 행에 대한 1 차 키 컬럼이 들어있다. InnoDB는이 기본 키 값을 사용하여 클러스터 된 인덱스의 행을 검색합니다.

몇 가지 추가 세부 사항과 함께 "기본 키 인덱스의 InnoDB의 기간"으로 정의한다, 또한 definition of clustered index in the glossary 참조하십시오.

질문에 대답하기 위해 기본 키를 만들거나 기본 키가없는 테이블에 적절한 UNIQUE 키 (모든 키 열은 NULL이 아님) 이외의 클러스터 된 인덱스를 만드는 방법이 없습니다. INDEX()은 어떤 작업을 수행하든 두 번째 (즉, 클러스터되지 않은) 키를 생성하기 만합니다.

* 참고 : 주석에서 지적한 것처럼 일부 다른 데이터베이스에는 클러스터형 인덱스가 전혀없고 일부 테이블에는 클러스터형 인덱스가 두 개 이상 허용됩니다. 나는 대답에 대해서만 MySQL을 다룰 것이다.

+0

... 색인() 다음 클러스터되지 않은 색인입니까? 그리고 거기에 기본 키 이외의 클러스터 된 인덱스를 만드는 방법은 무엇입니까? – developer098

+1

@ programmer321 올바른 'INDEX()'를 사용하면 보조 (즉, 클러스터되지 않은) 색인을 얻을 수 있습니다. 정의에 따르면 기본 키만 클러스터 된 인덱스가 될 수 있으므로 아니요 기본 키가 아닌 인덱스를 만들 수는 없습니다. –

+0

나는 그것을 업 그레 이드했다. 그러나 이것은 "정의에 의한 것이 아니다"라는 사소한 질문으로 InnoDB가 현재 구현되는 유일한 옵션이다. 다른 RDBMS 제품은 기본 키가 아닌 클러스터 된 인덱스를 지원합니다. * 여러 클러스터 된 인덱스를 지원하는 데이터베이스 제품조차 있습니다. –

1

열 A는 클러스터 된 인덱스 또는 클러스터되지 않은 인덱스입니까?

비 클러스터형 인덱스이며 기본 키 필드 만 클러스터형 인덱스를 가지고 있습니다. 테이블에는 클러스터 된 인덱스가 하나만있을 수 있으므로 확실히 만들 수는 없습니다.