2

テーブルに 773,705,261 行の SQL 2008 テーブルがあります。データをアーカイブするためのアーカイブ テーブルを作成したいのですが、このデータに必要な容量を削減したいと考えています。アーカイブされたデータへのアクセス速度は主要な関心事ではありませんが、常に望まれています。

現在のテーブル定義は次のようなものです。

TableID     (PK)    BIGINT      NOT NULL
DocumentID  (FK)    BIGINT      NOT NULL
StatusID    (FK)    INT         NOT NULL
RowCreateDate       DATETIME    NOT NULL

私の計算では、現在のテーブルはテーブルの行ごとに 28 バイトを使用しています。問題は、各 DocumentID に対して、システムが処理したステータスの量に応じて、このテーブルに 6 ~ 10 行が含まれる可能性があることです (DocumentID ごとの行数は将来的にも増加する可能性があります)。

このデータを保存するために必要な容量を削減するために私が最初に考えたのは、DocumentID ごとに 1 行を作成し、すべての StatusID とそれらが発生した回数を含む XML フィールドを作成することです。このようなもの:

TableID     (PK)    BIGINT      NOT NULL
DocumentID  (FK)    BIGINT      NOT NULL
Statuses            XML         NOT NULL

誰か私におすすめはありますか?私が研究できる方法はありますか?

4

2 に答える 2

0

INTTableID と DocumentID、SMALLINTまたはStatusID のデータ型を使用できる場合がありますTINYINTSMALLDATETIMERowCreateDate 列から必要な精度に応じて、またはを使用できる場合がありますDATE。これらのデータ型は使用するディスク容量が少なく、7 億 7500 万行よりも数 GB 節約できます。

ページ圧縮と FILLFACTOR = 100 の使用に関する Kenneth の提案は、検討する価値があります。

于 2013-02-14T18:53:18.487 に答える
0

ページ圧縮を使用するようにアーカイブ テーブルを設定します。

ボルから

CREATE TABLE dbo.T1 
(c1 int, c2 nvarchar(200) )
WITH (DATA_COMPRESSION = PAGE);

アーカイブ テーブルから更新または削除を行う予定がない場合 (テーブルのどちらの端からも離れていない削除)、100% のフィルファクターを使用してクラスター化インデックスも作成します。そうすれば、各ページにスペースが残りません。

もちろん、実際に何かを適用する前に、BOL で両方を調べます。

于 2013-02-14T16:59:18.077 に答える