3

오라클 테이블에 기본 키를 만들 때 기본적으로 '클러스터 된'인덱스가 생성되는 이유는 무엇입니까? 기본 키 생성시 클러스터 된 인덱스를 자동으로 생성하는 이유는 무엇입니까? 이런 식으로 오라클을 고안 한 오라클 디자이너의 선호도입니까?기본 키가 자동으로 클러스터 된 인덱스를 생성하는 이유

+1

'클러스터 된 색인'이란 무엇입니까? 아니면이 질문이 '오라클'이라는 라벨이 붙은 이유는 무엇입니까? – ibre5041

+2

@Ivan 이것은 Microsoft SQL 개념입니다. Oracle에는 클러스터 된 인덱스가 없습니다. 이와 같은 질문은 모호합니다. OP가 PK를 추가 할 때 색인이 작성되는 이유를 알고 싶습니까? 왜 '클러스터 된'색인이 존재하지 않는지? –

답변

14

오라클은 어떤 기존 인덱스가 적합없는 경우 고유 제약 조건을 단속하기 위해 인덱스를 생성합니다. 인덱스가 없으면 오라클은 누군가가 행을 삽입 또는 삭제 (또는 PK 업데이트)를 시도 할 때마다 연산 (예 : 테이블 잠금)을 직렬화해야합니다.

MS-SQL 서버와는 달리이 인덱스는 힙 테이블 (기본 테이블 구성)에 클러스터되지 않습니다. 즉,이 인덱스는 기본 테이블 구조와 자연 순서를 변경하지 않습니다. Oracle이 색인을 작성할 때 행의 순서가 재 지정되지 않습니다. 색인은 B-tree index이되며 각 항목이 주 테이블의 한 행을 가리키는 별도의 엔티티로 존재합니다.

Oracle은 MS SQL로 클러스터 된 인덱스를 가지고 있지 않지만 indexed-organized tables은 클러스터 인덱싱 된 테이블과 일부 속성을 공유합니다. PK는 이러한 테이블의 필수 부분이며 작성 중에 지정되어야합니다.

(오라클도 table clusters이지만 완전히 다른 개념입니다).

+0

이 때문에 SQL Server에 대한 응용 프로그램을 개발할 때'Select * from table'을 말할 수 있으며 오라클에 대해 'Select * from Table Order By ...'를 수행해야합니다. 클러스터 된 인덱스 PK를 사용하면 자동으로 항목을 정렬하기 때문입니다. –

+0

@ t.s. Pk에 의해 정렬 된 행을 원한다면 =) 또한 ORDER BY 절이없는 자연 순서에 의존하지 않을 것입니다 : 옵티마이 저가 액세스 경로/메소드를 변경하면 어떻게됩니까? (대답 : 당신은 순서대로 행을 얻을 것이다) –

+0

그건 클러스터 된 인덱스가 당신에게하는 예입니다 : o) –

0

색인 만들기는 기본 키의 기본 기능이며 SQL Server 및 MySQL에도 포함되어 있으므로 클러스터 된 색인을 사용하면 검색 속도가 빨라집니다.

-1

데이터베이스 엔진은 고유 인덱스를 자동으로 만들어 PRIMARY KEY 제약 조건의 고유성을 적용합니다. 클러스터형 인덱스가 테이블에 아직 없거나 클러스터되지 않은 인덱스가 명시 적으로 지정되어 있지 않으면 고유 한 클러스터형 인덱스가 만들어져 PRIMARY KEY 제약 조건이 적용됩니다.

이 읽기 ​​: http://www.sqlskills.com/blogs/kimberly/the-clustered-index-debate-continues/