2010-07-26 125 views
0

我有了持有幾百萬條記錄幾個表一個龐大的數據庫。它爲客戶持有工程數據並不斷增長。即使在優化索引的情況下,這也會影響性能。所以我一直在尋找分區。的SQL Server 2008表分區

不過,我想在一臺保持的版本看着分區。在它的最簡單形式的表包括: -

VersionID int
SheetID int
CreationDate datetime
SomeDate nvarchar(255)
Version int

而且數據看起來是這樣的: -

1, 1, 2010-09-01, blah, 1
2, 1, 2010-09-02, more blah, 2
3, 1, 2010-09-04, blah, 3
4, 2, 2010-09-02, more blah, 1

對於每一個新的變化,以在系統中的「表」 ,這個表格有一個新的條目添加了一個新的版本。理想情況下,我想對桌子進行分區,以便每個「表格」具有前2個版本。所以從上面的表格我想要版本2 & 3爲圖紙ID 2和版本1爲圖紙ID 2,其餘的移動到分區。從我讀過的這個看起來不太可能。我是對還是錯?

如果我錯了,那麼根據這一點我有一堆表格的所有鏈接回該表。這些保存輸入的各種版本的數據。我可以根據「主」表的分區對這些分區進行分區,還是分區必須專門基於它引用的表中的列?

NB我不是最AU既成事實SQL開發人員,所以道歉,如果這是一個完全愚蠢的問題!

回答

0

對於「數百萬條記錄」的數量 - 分區將是矯枉過正 - 我懷疑你會更好看錶現較差的查詢的查詢計劃和審查被滿足他們的指標。

分區的目標是提供一種在沒有大規模刪除的情況下老化舊數據的方法,因爲性能增益是副產品,因此分區消除仍然可以超過合適的聚簇索引 - 這取決於索引大小/桌子大小。

你可以做範圍分區SQL內,但它是相當多的開銷來實現這樣的可變移動窗口,如果我正確判斷的要求。

就最終問題而言,要在相同的值上進行分區,該值將不得不出現在兩個表中,儘管從技術上講,您可以在計算列上進行分區,因此如果您有可以使用的模式綁定函數爲了計算相應的值,那就足夠了。 (但是,考慮到行數很少,我認爲這是矯枉過正的)。

+0

嗯......它沒有什麼區別,它是一個參數化數據庫,其中包含大約相關的鏈接。 30桌?聽起來像我需要重新訪問索引。謝謝 – grimorde 2010-07-26 13:33:14