기본 키를 추가하기 전 또는 후에 페이지 레벨 압축을 추가해야합니까?


14

상태

  • Sql Server 2008 Enterprise의 데이터웨어 하우스
  • 60 개 이상의 열이있는 36 백만 백만 행 힙 (요청하지 않음)
  • 매달 750k 추가
  • 기본 키가 정의되어 있지 않습니다 (지금 식별했습니다).
  • 압축 없음

내가하고 싶은 일 (이 순서대로)

  • 페이지 레벨 압축 추가
  • PK 추가
  • 여러 비 클러스터형 인덱스 추가
  • 최대한 빨리이 작업을 수행하십시오

질문


내가 지금 기대하고있는 것

-- Add page level compression
alter table     dbo.TableName
rebuild with    (data_compression = page)
; 
go

-- Add primary key
alter table             dbo.TableName
add constraint          PK_TableName
primary key clustered   (<Columns>)
;
go

-- Add NC_IXs here
...
...

필자는 여기 (PK 작성 문서)여기 (ALTER TABLE 문서) 를 보았지만 인덱스가 테이블 압축 설정을 상속하는지 여부에 대한 결정적인 것은 없습니다. 이 특정 질문에 대한 대답은 "아니요, 압축이 상속되지 않습니다"입니다. 여기 dba.stackexchange에 있습니다.

답변:


12

클러스터 된 인덱스는 실제로 테이블입니다. 기본 키가 클러스터되어 있다고 가정하면 두 단계로 수행하지 않고 페이지 수준 압축을 사용하여 클러스터 기본 키를 만듭니다.

-- Add primary key
ALTER TABLE             dbo.TableName
ADD CONSTRAINT          PK_TableName
PRIMARY KEY CLUSTERED   (<Columns>)
WITH (DATA_COMPRESSION = PAGE)
;

또한 약 100k 행을 임시 (# 임시가 아닌 임시 물리적) 테이블에 복사하고 일부 테스트를 실행합니다. 먼저 압축 된 클러스터 키를 먼저 실행하고 한 단계로 수행해보십시오. 무엇이 가장 빠르게 실행되는지 확인하십시오. 나는 개인적으로 한 걸음이 될 것이라고 생각합니다 :).


2

어느 쪽이든, 페이지 압축은 LOT 주위에서 데이터를 섞습니다. 클러스터링 작업에서 압축 된 페이지를 읽으므로 압축을 먼저 수행하면 전체 I / O가 줄어 듭니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.