天天看點

SQL Server 2008-建立分區表(Table Partition)

資料庫結構和索引的是否合理在很大程度上影響了資料庫的性能,但是随着資料庫資訊負載的增大,對資料庫的性能也發生了很大的影響。可能我們的資料庫在一開始有着很高的性能,但是随着資料存儲量的急速增長—例如訂單資料—資料的性能也受到了極大的影響,一個很明顯的結果就是查詢的反應會非常慢。在這個時候,除了你可以優化索引及查詢外,你還可以做什麼?建立分區表(Table Partition)可以在某些場合下提高資料庫的性能,在SQL Server 2005中也可以通過SQL語句來建立表分區,但在SQL Server 2008中提供了向導形式來建立分區表。本文介紹了如何來建立分區表。

什麼是分區表?

分區表是把資料按某種标準劃分成區域存儲在不同的檔案組中,使用分區可以快速而有效地管理和通路資料子集,進而使大型表或索引更易于管理。合理的使用分區會很大程度上提高資料庫的性能。已分區表和已分區索引的資料劃分為分布于一個資料庫中多個檔案組的單元。資料是按水準方式分區的,是以多組行映射到單個的分區。已分區表和已分區索引支援與設計和查詢标準表和索引相關的所有屬性和功能,包括限制、預設值、辨別和時間戳值以及觸發器。因為分區表的本質是把符合不同标準的資料子集存儲在一個資料庫的一個或多個檔案組中,通過中繼資料來表述資料存儲邏輯位址。

決定是否實作分區主要取決于表目前的大小或将來的大小、如何使用表以及對表執行使用者查詢和維護操作的完善程度。通常,如果某個大型表同時滿足下列兩個條件,則可能适于進行分區:

·         該表包含(或将包含)以多種不同方式使用的大量資料。

·         不能按預期對表執行查詢或更新,或維護開銷超過了預定義的維護期。

例如,如果對目前月份的資料主要執行 INSERT、UPDATE、DELETE 和 MERGE 操作,而對以前月份的資料主要執行 SELECT 查詢,則按月份對表進行分區可能會使表的管理工作更容易一些。如果對表的正常維護操作隻針對一個資料子集,那麼此優點尤為明顯。如果該表沒有分區,那麼就需要對整個資料集執行這些操作,這樣就會消耗大量資源。例如,通過分區,可以針對具有隻寫資料的單個月份執行類似索引重新生成和碎片整理的維護操作,而隻讀資料仍可用于聯機通路。

Transact-SQL ALTER TABLE...SWITCH 語句還可以快速有效地移動資料子集。這也提供了很好的便利,讓我們可以放心的對資料表進行全面的維護。

怎麼建立分區表?

建立分區表分為以下幾個步驟:

1.       建立分區函數以指定如何分區使用該函數的表。(T-SQL: CREATE PARTITION FUNCTION)

2.       建立分區方案以指定分區函數的分區在檔案組上的位置。(T-SQL: CREATE PARTITION SCHEMA)

3.       建立使用分區方案的表。

以下步驟示範了如何在SQL Server 2008 Management Studio中通過向導完成建立分區表的過程。當然,你也可以通過腳本來完成這些功能。

1.       在SQL Server 2008 Management Studio中選擇你想要建立分區表的對象,右鍵點選表名選擇Storage –> Create Partition.

2.       在出現的Create Partition Wizard中點選Next按鈕進入Select  a Partition Column頁面。

3.       在Select a Partition Column頁面設定基于哪個字段進行資料子集劃分。在這裡我們選擇EndDate。在後邊會對EndDate設定條件來劃分資料子集。

SQL Server 2008-建立分區表(Table Partition)

4.       在Select a Partition Function頁面輸入一個名字來作為Function的名稱。這裡我們輸入YearOrderPartitionFunction

5.       下一步是給建立的分區方案命名。在Select a Partition Schema頁面輸入YearOrderPartition作為名稱。

6.       在Map Partition頁面上我們設定分區标準。Left Boundary和Right Boundary是指符合區分标準的資料被放置到那個資料子集,對應<=和<.

7.       點選Set Boundaries來設定基于EndDate的資料子集劃分标準。

SQL Server 2008-建立分區表(Table Partition)

8.       點選Estimate storage來估算每個資料子集的空間大小和其資料條目。根據設定的從2001-01-01到2004-12-31為止的所有資料按年劃分的标準,我們最終得到了5個資料子集和一個用來存放最新資料的子集。這個新的資料子集對任何分區都是必須的,每個分區表中都會含有這個新的資料子集用來存放不同于資料标準劃分的所有子集的資料(在這裡就是大于2005年1月1日的訂單)。