2013-02-14 62 views
2

我有一個SQL表,其中有773,705,261行的SQL表。我想創建一個歸檔表來存檔數據,但是我想減少這些數據所需的空間。訪問歸檔數據的速度並不是主要關心的問題,但總是需要。在SQL Server中爲歸檔表節省空間

當前表的定義是這樣的:

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行,並且有一個XML字段包含它們發生的所有StatusID和時間。這樣的事情:

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

有沒有人對我有任何建議?我可以研究的任何方法?

回答

0

設置您的存檔表以使用頁面壓縮。

從BOL

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

如果你不希望做任何更新或從存檔表中刪除(當然這不是假表的兩端刪除),那麼我也將創建一個集羣索引使用100%的填充因子。這樣每個頁面就不會留下任何空間。

當然,我會在實際應用任何東西之前在BOL中看到兩者。

0

對於StatusID,您可以使用INT數據類型作爲TableID和DocumentID,使用SMALLINTTINYINT。根據您需要的RowCreateDate列的精度,您可以使用SMALLDATETIMEDATE。這些數據類型使用較少的磁盤空間,並將爲您的775,000,000行節省幾GB。

Kenneth關於使用頁面壓縮和FILLFACTOR = 100的建議絕對值得考慮。