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オプションが、表に対して、または表がパーティション化されている場合はそのパーティションの少なくとも1つに対して、複数回指定されました。

PKとテーブルに置くことに違いはありますか?


主キーがテーブルのクラスター化された列でない場合、違いがあると思いますか?:)
LowlyDBA 2015年

1
@JohnM:私はそう思いますが、わかりません。(それが私が尋ねている理由です:)
Vaccano

回答:


14

これは、主キーを圧縮することではなく、クラスター化インデックスを圧縮することです。SQL Serverの場合、クラスター化インデックスはテーブルの物理構造をそのインデックスに編成しています。または、より短い形式では、クラスター化インデックスはテーブルです。つまり、クラスター化インデックスの圧縮とテーブルの圧縮は機能的に同等です。主クラスタを非クラスタ化インデックスとして作成し、ベーステーブルをヒープとして保持する場合、これら2つの構造は異なり、別々に圧縮されます。


すべての合理性を無視して、主キーを非クラスター化インデックスにし、別のクラスター化インデックスを作成した場合はどうなりますか?圧縮は再び同じでしょうか?
ロスプレッサー2015年

1
そうではありません。ここでは主キーについて考えないでください。それは無関係です。ここでは、クラスター化および非クラスター化のインデックスに焦点を当てる必要があります。クラスタ化インデックスとテーブルは同じオブジェクトであるため、別々に圧縮することはできません。クラスタ化インデックス/テーブルと非ク​​ラスタ化インデックスは異なるオブジェクトであり、個別に圧縮する必要があります。
Mike Fal 2015年

私はひどく自分を表現しました。あなたの答えはまさに私が駆り立てていたものです-クラスター化インデックスは(インデックス化されているものは何でも)圧縮でき、ヒープは(クラスター化インデックスがない場合)圧縮できます。両方ではありません。また、非クラスター化インデックスを個別に圧縮することもできます。
ロスプレッサー、2015年

正確ですが、明確にするために、同じテーブルにヒープとクラスター化インデックスを作成することはできません。それはどちらかです。SQL Serverの動作のため、主キーとクラスター化インデックスを混同することがよくあるので、この回答の違いを確実に理解したいと思います。
Mike Fal 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.