2014-06-19 2 views
0

설명한대로 here 데이터베이스의 클러스터 된 인덱스는 데이터가 실제로 디스크에 할당되는 방식에 영향을줍니다.거대한 테이블의 클러스터 된 인덱스 변경시 데이터 재정렬

거대한 데이터베이스 테이블이 있고 PRIMARY KEY를 변경하려고 결정하면 물리적 데이터를 다시 정렬하게됩니까?

이 작업에 필요한 여유 공간 (필요한 경우)은 무엇입니까?

내 db 파일에 단일 테이블이 포함되어 있고 크기가 100GB라고 가정 해 보겠습니다.

+0

[인덱스 DDL 작업을위한 디스크 공간 요구 사항] (http://msdn.microsoft.com/en-us/library/ms179542 (v = sql.110) .aspx) – Pred

답변

0

첫 번째 질문의 경우 : 예, CLUSTERED INDEX을 변경하면 데이터가 재 배열된다는 의미입니다. (실제로 인덱스를 변경하면 인덱스에 저장된 데이터가 새 정의에 맞게 다시 정렬됩니다.

두 번째 부분은 색인을 변경할 수 없다는 것입니다. 즉, 이전 색인 DROP과 새 색인 CREATE을 사용해야합니다. 이것은 이전 색인과 관련된 데이터가 삭제되고 새 색인의 데이터가 디스크에 저장된다는 것을 의미합니다.

당신이 CLUSTERED INDEX 드롭

는 thow 일이 발생합니다

  • 의 표는 HEAP 테이블되었고, 행 식별자 (RID) 각 행에 대해 생성됩니다.
  • 모든 NONCLUSTERED INDEX 그들이 참조하고 있기 때문에 하나의 열쇠 CLUSTERED INDEX 또는 여유 공간 요구를 들어 HEAP RID

에, rebuilded 될 것입니다, 당신은 여기에서 시작할 수 있습니다 : 해당 페이지에서 http://msdn.microsoft.com/en-us/library/ms179542(v=sql.110).aspx

을 :

추가 디스크 공간이 필요한 색인 작업

다른 모든 인덱스 DDL 작업에는 작업 중에 사용할 추가 임시 디스크 공간과 새 인덱스 구조를 저장하기위한 영구 디스크 공간이 필요합니다.

새 인덱스 구조가 만들어지면 해당 파일과 파일 그룹에 이전 (원본) 구조와 새 (대상) 구조에 대한 디스크 공간이 필요합니다. 인덱스 생성 트랜잭션이 커밋 될 때까지 이전 구조는 할당 해제되지 않습니다.

  • ALTER INDEX는
  • ALTER TABLE 제한 조건을 추가 REBUILD DROP_EXISTING
  • WITH INDEX를 CREATE (PRIMARY KEY INDEX CREATE :

    다음 인덱스 DDL 작업은 새 인덱스 구조를 생성하고 추가 디스크 공간이 필요합니다 또는 UNIQUE)

  • 제약 조건이 클러스터형 인덱스를 기반으로하는 경우 ALTER TABLE DROP CONSTRAINT (PRIMARY KEY 또는 UNIQUE)
  • DROP INDEX MOVE TO (클러스터형 인덱스에만 적용됩니다.쿼리 최적화가 필요없는 실행 계획을 발견하지 않는 한 원본 및 대상 구조에 필요한 디스크 공간 외에

    정렬 용)

임시 디스크 공간은 임시 디스크 공간은 정렬이 필요합니다 정렬.

정렬이 필요한 경우 한 번에 하나의 새 색인이 정렬됩니다. 예를 들어, 클러스터 된 인덱스와 연관된 단일 클러스터 된 인덱스를 다시 작성할 때 인덱스는 차례로 정렬됩니다. 따라서 정렬에 필요한 추가 임시 디스크 공간은 조작의 최대 색인만큼 커야합니다. 거의 항상 클러스터 된 인덱스입니다.

SORT_IN_TEMPDB 옵션을 ON으로 설정하면 가장 큰 인덱스가 tempdb에 맞아야합니다. 이 옵션을 사용하면 인덱스를 만드는 데 사용되는 임시 디스크 공간이 증가하지만 tempdb가 사용자 데이터베이스와 다른 디스크 집합에있을 때 인덱스를 만드는 데 필요한 시간을 줄일 수 있습니다.

SORT_IN_TEMPDB를 OFF (기본값)로 설정하면 분할 된 인덱스를 포함한 각 인덱스가 대상 디스크 공간에서 정렬됩니다. 새로운 색인 구조를위한 디스크 공간 만 필요합니다. 디스크 공간을 계산하는 예는 색인 디스크 공간 예를 참조하십시오.