2010-11-25 69 views
0

我可能會在一張巨大的桌子上實現分區(數十億行)。如何在sql server 2008 r2上實現mod分區?

每個表格行都有一些關於特定設備的狀態,該設備從分鐘到分鐘插入。因此,每臺設備每天將會有1440(24 x 60)行。每個設備都有唯一的ID(DeviceID)。

我想過使用DeviceID MOD進行分區{TheNumberOfPartitionsThatIWant},我認爲TheNumberOfPartitionsThatIwant是250是一個很好的折中。使用這種策略,我可以在整個分區平均分配設備,而且在查詢特定設備時,查詢引擎只需要接觸一個分區,而不是全部250個分區。

問題是我需要向我的表添加一個額外的列,只是爲了指示該行所屬的分區,以便我可以使用此列在分區架構上定義表。將(DeviceID MOD 250)提供給分區模式將會好得多,而不是具有如此簡單表達式的該列。有沒有解決方法?

+0

我在你以前的[問題](http://stackoverflow.com/questions/4249073/partitioning-for-query-performance-in-sql-server-2008)上看到一條評論,你有** 2 **驅動器。使用2個分區..不是?如果你想處理這些卷,你根本不需要在硬件上進行任何操作。 – gbn 2010-11-25 12:01:46

回答

2

您可以基於函數對基於模式綁定的計算列進行分區 - 但是,儘管這樣做有效,但好處將受到限制,我希望看到它的縮放測試。此外,它還要求對該表的每個訪問都使用該標準內的相同功能。

關鍵在於dportas - 分區旨在使數據老化成爲一項微不足道的操作,在某些時候系統中的數據需要清除,因爲太舊/沒有價值,此時您將被減少爲長時間運行的刪除操作以刪除此數據。

就跨多個磁盤傳播數據而言,分區不會爲現有文件組/文件設施提供任何明顯額外的任何內容。

0

合適的索引可能會比分區獲得更好的結果。正如@Andrew所說,分區主要用於快速數據加載和卸載(即將分區切入和切出)。

0

我創建了一個計算列,解決了這個問題。