PK 압축과 테이블 압축의 차이점은 무엇입니까?


9

테이블에서 데이터 압축을 설정할 수 있습니다.

CREATE TABLE dbo.SomeTable(
    SomeId [bigint] NOT NULL,
    OtherId [bigint] NOT NULL,
    IsActive [bit] NOT NULL,
 CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED 
 (
    SomeId Desc
 )
) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE)

기본 키에서 정의 할 수 있습니다.

CREATE TABLE dbo.SomeTable(
    SomeId [bigint] NOT NULL,
    OtherId [bigint] NOT NULL,
    IsActive [bit] NOT NULL,
 CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED 
 (
    SomeId Desc
 ) WITH (DATA_COMPRESSION=PAGE)
) ON SomePartitionScheme(SomeId) 

그러나 두 가지 모두를 넣으면이 오류가 발생합니다.

DATA_COMPRESSION 옵션이 테이블 또는 테이블이 파티션 된 경우 하나 이상의 파티션에 대해 두 번 이상 지정되었습니다.

PK와 테이블을 비교할 때 차이점이 있습니까?


기본 키가 테이블의 클러스터 된 열 이 아닌 경우 차이가 있다고 생각하십니까 ? :)
LowlyDBA 2016 년

1
@ JohnM : 그렇게 추측하지만 모르겠습니다. (그게 내가 묻는 이유입니다.)
Vaccano

답변:


14

기본 키에 압축을 설정하는 것이 아니라 클러스터 된 인덱스 에 압축을 설정하는 것 입니다. SQL Server의 경우 클러스터형 인덱스는 해당 인덱스에서 테이블의 물리적 구조를 구성합니다. 또는 더 짧은 형식으로 클러스터 된 인덱스가 테이블입니다. 즉, 클러스터형 인덱스 압축과 테이블 압축은 기능적으로 동일합니다. 기본 키를 비 클러스터형 인덱스로 만들고 기본 테이블을 힙으로 유지하려는 경우이 두 구조는 서로 다르고 별도로 압축됩니다.


모든 합리성을 무시하고 기본 키를 비 클러스터형 인덱스로 만들고 다른 클러스터형 인덱스를 만든 경우 어떻게해야합니까? 그렇다면 압축이 다시 동일할까요?
Ross Presser

1
그렇지 않습니다. 여기에서 기본 키를 생각하지 마십시오. 그것은 중요하지 않습니다. 여기서는 클러스터 및 비 클러스터형 인덱스에 중점을 두어야합니다. 클러스터 된 인덱스와 테이블은 동일한 개체이므로 별도로 압축 할 수 없습니다. 클러스터형 인덱스 / 테이블과 비 클러스터형 인덱스는 서로 다른 개체이므로 개별적으로 압축해야합니다.
Mike Fal

나는 나 자신을 나쁘게 표현했다. 당신의 대답은 정확히 내가 운전 한 것입니다-클러스터 된 인덱스를 압축하거나 (인덱싱하는 것이 무엇이든) 힙을 압축 할 수 있습니다 (클러스터형 인덱스가없는 경우). 비 클러스터형 인덱스도 별도로 압축 할 수 있습니다.
Ross Presser

정확하지만 명확하게 말하면 동일한 테이블에 힙과 클러스터형 인덱스를 가질 수 없습니다. 하나 또는 다른 것입니다. SQL Server의 작동 방식으로 인해 사람들이 기본 키와 클러스터 된 인덱스를 혼동하는 것이 일반적이므로이 답변의 차이점을 이해하고 싶습니다.
Mike Fal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.