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

 
接分区表理论解析(上)
 
分区方案<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

对表和索引进行分区的第二步是创建分区方案。分区方案定义了一个特定的分区函数将使用的物理存储结构(其实就是文件组),或者说是分区方案将分区函数生成的分区映射到我们定义的一组文件组。所以分区方案解决的是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)

as range left

for values(500000,1000000,1500000)

go

create partition scheme MyPS2

as partition MyPF2

to (fg1, fg1, fg1, fg2)

文件组、分区和分区边界值范围之间的关系如下表:

文件组

分区

取值范围

fg1

1

( 负无穷 ,500000]

Fg1

2

[500001,1000000]

Fg1

3

[1000001,1500000]

Fg2

4

[1500001, 正无穷 )

 

分区方案例子3:下面的代码先创建一个分区函数,然后再创建这个分区函数使用的分区方案,这个分区方案将所有分区映射到同一个文件组。代码如下:

create partition function MyPF3 (int)

as range left

for values(500000,1000000,1500000)

go

create partition scheme MyPS3

as partition MyPF3

all to (fg1)

文件组、分区和分区边界值范围之间的关系如下表:

文件组

分区

取值范围

fg1

1

( 负无穷 ,500000]

Fg1

2

[500001,1000000]

Fg1

3

[1000001,1500000]

Fg1

4

[1500001, 正无穷 )

 

分区方案例子4:下面的代码先创建一个分区函数,然后再创建这个分区函数使用的分区方案,这个分区方案指定了“NEXT USED”文件组。代码如下:

create partition function MyPF4(int)

as range left

for values(500000,1000000,1500000) --4 个分区

go

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('<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2008/01/01', '2009/01/01')

go

create partition scheme MyPS5

as partition MyPF5

to ( [primary], fg1, fg2)

 

最后必须明白一点,一张表最多只能有 1000 个分区。

 

分区表

 

在分区函数和分区方案创建完成后,创建分区表的准备工作已经完成。我们看一个完整的例子,代码如下:

-- 创建分区函数

create partition function MyPF(datetime)

range right

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

go

-- 创建分区方案

create partition scheme MyPS

as partition MyPF

to ( fg1, fg2, fg3)

go

-- 创建分区表

create table orders

(

    OrderID int identity(1,1) primary key,

    OrderDate datetime,

    CustID varchar(10)

)

on MyPS(OrderDate)

 

更完整的例子请关注实战分区表,我会用一个完整的 Demo 来演示分区表这一技术。

下一节内容包裹:

1,  实战分区表

2,  查询某个分区

3,  增加分区

4,  删除分区

5,  归档数据

敬请期待 ...

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值