設計資料分割來管理資料的子集
對資料表或索引進行資料分割,就可以依照下列方式使用 Transact-SQL ALTER TABLE...SWITCH 陳述式來快速有效地移動資料的子集:
將資料表做為資料分割,加入現有的資料分割資料表。
從一個資料分割資料表切換資料分割到另一個。
移除資料分割形成單一的資料表。
當您想要定期將資料加入資料分割資料表,並從相同的資料分割資料表移除舊資料,這些狀況就會很有用。此項作業可在各種狀況中處理大量或小量的資料。如果您要加入的新資料必須載入、刪除或轉換,在將它加入為資料分割之前,就可以視為分開的實體。舊資料可以封存或放入資料倉儲。無論收集多大或多小,都可以快速而有效率地傳送,因為資料並非像 INSERT INTO SELECT FROM 陳述式一樣實體移動。只有關於其儲存位置的中繼資料會從一個資料分割變更到另一個。
範例狀況
在 AdventureWorks2008R2 範例資料庫的資料分割狀況下,Adventure Works Cycles 藉由在兩個資料表之間切換,將 TransactionHistory 資料表的舊資料封存到 TransactionHistoryArchive 資料表。方法是對 TransactionHistory 的 TransactionDate 欄位進行資料分割。每一個資料分割的數值範圍是一個月。TransactionHistory 資料表維護年度最新的交易,而 TransactionHistoryArchive 則維護舊的交易。以這種方式進行資料分割,每當單一月份變成年度舊資料時就可以每個月固定從 TransactionHistory 傳送到 TransactionHistoryArchive。
每個月一開始,目前 TransactionHistory 資料表中最早月份的資料就會切換到 TransactionHistoryArchive 資料表。若要完成此工作,需要下列條件:
TransactionHistoryArchive 資料表和 TransactionHistory 資料表必須有相同的設計結構。也必須要有空的資料分割才能接收新資料。在此情況下,TransactionHistoryArchive 是僅包含兩個資料分割的資料分割資料表。其中一個資料分割會保存 2003 年 9 月之前的所有資料,而另一個資料分割則保存 2003 年 9 月和之後的所有資料。最後一個資料表則是空的。
修改 TransactionHistoryArchive 資料表的資料分割函數將空的資料分割分成兩個,一個資料分割定義為接收 2003 年 9 月資料的新資料分割。
TransactionHistory 資料表的第一個資料分割,包含 2003 年 9 月期間建立的所有資料,會切換到 TransactionHistoryArchive 資料表的第二個資料分割。請注意,必須在 TransactionHistory 資料表上定義檢查條件約束,以指定沒有比 9 月 1 日更早的資料 (TransactionDate >= '9/01/2003')。此條件約束可確保資料分割 1 僅包含 2003 年 9 月的資料,而且準備好切換到僅保留 TransactionHistoryArchive 資料表 2003 年 9 月資料的資料分割。您也需注意沒有與相對資料表校準的任何索引,必須在切換之前先卸除或停用。但是,它們可以在切換之後重新建立。如需有關對齊資料分割索引的詳細資訊,請參閱<資料分割索引的特殊指導方針>。
修改 TransactionHistory 資料表的資料分割函數將前兩個資料分割合併成單一資料分割。此資料分割 (現在是資料分割 1) 包含在 2003 年 10 月建立的所有資料,如果改變現有的檢查條件約束指定沒有比 10 月 1 日還早的資料 (TransactionDate >= '10/01/2003'),就會在下個月準備切換到 TransactionHistoryArchive。
再次修改 TransactionHistoryArchive 資料表的資料分割函數,將第二個資料分割與第一個資料分割合併,第二個資料分割包含剛剛加入的 9 月資料。此動作會將 TransactionHistoryArchive 資料表變回它原來的狀況,第一個資料分割保留所有資料,而第二個資料分割是空的。
再次修改 TransactionHistory 資料表的資料分割函數將最後的資料分割分成兩個資料分割,以便將最新月份和前一月份分開,該資料分割就可以準備接收新資料。
如需實作此案例的 Transact-SQL 指令碼,請參閱<ReadMe_SlidingWindow>範例。如需有關範例的詳細資訊,請參閱<安裝 SQL Server 範例和範例資料庫的考量>。