主キーを追加する前に、または後にページレベルの圧縮を追加する必要がありますか?


14

状況

  • SQL Server 2008 Enterpriseのデータウェアハウス
  • 3,600万行以上のヒープ(問いません)、60列以上
  • 毎月75万件追加
  • 主キーが定義されていません(現在識別されています)
  • 圧縮なし

私が考えていること(この順序で)

  • ページレベルの圧縮を追加する
  • 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

実際、クラスター化インデックスはテーブルです。主キーがクラスター化されているという前提で、2段階で実行するのではなく、ページレベルの圧縮でクラスター化された主キーを作成します。

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

また、約10万行を一時(#temporaryではなく一時的な物理)テーブルにコピーし、いくつかのテストを実行します。最初に圧縮を実行し、クラスター化されたキーを最初に実行し、1つのステップとして実行してみてください。最も高速に実行されるものを参照してください。個人的には1ステップになると思います:)。


2

いずれにせよ、ページ圧縮はLOTの周りのデータをシャッフルします。クラスタリング操作は圧縮されたページを読み取るため、最初に圧縮を実行すると全体的なI / Oが少なくなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.