天天看點

分區表理論解析(下):SQL Server 2k5&2k8系列(二)

<b></b>

<b>接分區表理論解析(上)</b>

<b>分區方案</b>

對表和索引進行分區的第二步是建立分區方案。分區方案定義了一個特定的分區函數将使用的實體存儲結構(其實就是檔案組),或者說是分區方案将分區函數生成的分區映射到我們定義的一組檔案組。是以分區方案解決的是Where的問題,即表的各個分區在哪裡存儲的問題。分區方案的建立文法如下:

CREATE PARTITION SCHEME partition_scheme_name

AS PARTITION partition_function_name

[ ALL ] TO ( { file_group_name | [ PRIMARY ] } [ ,...n ] )

[ ; ]

分區方案文法的相關解釋:

1,  建立分區方案時,根據分區函數的參數,定義映射表分區的檔案組。必須指定足夠的檔案組來容納分區數。可以指定所有分區映射到不同檔案組、某些分區映射到單個檔案組或所有分區映射到單個檔案組。如果您希望在以後添加更多分區,還可以指定其他“未配置設定的”檔案組。在這種情況下,SQL Server 用 NEXT USED 屬性标記其中一個檔案組。這意味着該檔案組将包含下一個添加的分區。一個分區方案僅可以使用一個分區函數。但是,一個分區函數可以參與多個分區方案。

2,  partition_scheme_name 是分區方案的名稱。分區方案名稱在資料庫中必須是唯一的,并且符合辨別符規則。

3,  partition_function_name 是使用目前分區方案的分區函數的名稱。分區函數所建立的分區将映射到在分區方案中指定的檔案組。partition_function_name 必須已經存在于資料庫中。

4,  ALL 指定所有分區都映射到在 file_group_name 中提供的同一個檔案組,或映射到主檔案組(如果指定了 [PRIMARY])。如果指定了 ALL,則隻能指定一個 file_group_name。

5,  file_group_name | [ PRIMARY ] [ ,...n] 代表n個檔案組。和分區函數中的各個分區對應。檔案組必須已經存在于資料庫中。 如果指定了 [PRIMARY],則分區将存儲于主檔案組中。如果指定了 ALL,則隻能指定一個 file_group_name。分區配置設定到檔案組的順序是從分區 1 開始,按檔案組在 [,...n] 中列出的順序進行配置設定。在 [,...n] 中,可以多次指定同一個檔案組。如果 n 不足以擁有在分區函數中指定的分區數,則 CREATE PARTITION SCHEME 将失敗,并傳回錯誤。

6,  如果分區函數生成的分區數少于建立分區方案時提供的檔案組數,則分區方案中第一個未配置設定的檔案組将被标記為NEXT USED,并且出現顯示命名 NEXT USED 檔案組的資訊。如果指定了 ALL,則單獨的檔案組将為該分區函數保持它的NEXT USED 屬性。如果在 ALTER PARTITION FUNCTION 語句中建立了一個分區,則 NEXT USED 檔案組将再接收一個分區。若要再建立一個未配置設定的檔案組來擁有新的分區,請使用 ALTER PARTITION SCHEME。

分區方案例子1:下面的代碼先建立一個分區函數,然後再建立這個分區函數使用的分區方案,這個分區方案将每個分區映射到不同檔案組。代碼如下:

create partition function MyPF1(int)

as range left

for values(500000,1000000,1500000)

go

create partition scheme MyPS1

as partition MyPF1

to (fg1, fg2, fg3, fg4)

檔案組、分區和分區邊界值範圍之間的關系如下表:

檔案組

分區

取值範圍

fg1

1

(負無窮,500000]

fg2

2

[500001,1000000]

fg3

3

[1000001,1500000]

fg4

4

[1500001,正無窮)

分區方案例子2:下面的代碼先建立一個分區函數,然後再建立這個分區函數使用的分區方案,這個分區方案将多個分區映射到同一個檔案組。代碼如下:

create partition function MyPF2(int)

create partition scheme MyPS2

as partition MyPF2

to (fg1, fg1, fg1, fg2)

Fg1

Fg2

分區方案例子3:下面的代碼先建立一個分區函數,然後再建立這個分區函數使用的分區方案,這個分區方案将所有分區映射到同一個檔案組。代碼如下:

create partition function MyPF3 (int)

create partition scheme MyPS3

as partition MyPF3

all to (fg1)

分區方案例子4:下面的代碼先建立一個分區函數,然後再建立這個分區函數使用的分區方案,這個分區方案指定了“NEXT USED”檔案組。代碼如下:

create partition function MyPF4(int)

for values(500000,1000000,1500000) --4個分區

create partition scheme MyPS4

as partition MyPF4

to (fg1, fg2, fg3, fg4, fg5)   --5個檔案組

那麼檔案組fg5将自動被标記為“NEXT USED”檔案組。

分區方案例子5:下面的代碼先建立一個分區函數,然後再建立這個分區函數使用的分區方案,這個分區方案指定了“[primary]”檔案組。代碼如下:

create partition function MyPF5(datetime)

range right

for values('2008/01/01', '2009/01/01')

create partition scheme MyPS5

as partition MyPF5

to([primary], fg1, fg2)

最後必須明白一點,一張表最多隻能有1000個分區。

<b>分區表</b>

<b> </b>

在分區函數和分區方案建立完成後,建立分區表的準備工作已經完成。我們看一個完整的例子,代碼如下:

--建立分區函數

create partition function MyPF(datetime)

for values('2007-1-1', '2008-1-1')

--建立分區方案

create partition scheme MyPS

as partition MyPF

to(fg1, fg2, fg3)

--建立分區表

create table orders

(

    OrderID int identity(1,1) primary key,

    OrderDate datetime,

    CustID varchar(10)

)

on MyPS(OrderDate)

更完整的例子請關注實戰分區表,我會用一個完整的Demo來示範分區表這一技術。

下一節内容包裹:

1,  實戰分區表

2,  查詢某個分區

3,  增加分區

4,  删除分區

5,  歸檔資料

敬請期待...

本文轉自terryli51CTO部落格,原文連結: http://blog.51cto.com/terryli/163317,如需轉載請自行聯系原作者