一个未分配的文件组将被标记为 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 Fg2 Fg3 Fg4
分区方案例子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)
文件组、分区和分区边界值范围之间的关系如下: 文件组 分区
取值范围,
1 2 3 4
取值范围, [负无穷,500000] [500001,1000000] [1000001,1500000] [1500001,正无穷]
Fg1 Fg1 Fg1 Fg2
1 2 3 4
[负无穷,500000] [500001,1000000] [1000001,1500000] [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 Fg1 Fg1 Fg1
1 2 3 4
取值范围, [负无穷,500000] [500001,1000000] [1000001,1500000] [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('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)
下面的示例完整地演示了SQL Server 2005 分区表的创建、分区查询、分区转换的三种形式:
新建一个文件组
ALTER DATABASE G5_luochuan ADD FILEGROUP [yalc_yygl] 给文件组添加一个文件
ALTER DATABASE G5_luochuan ADD FILE
(NAME=N'PF_QuantityCharge200909',FILENAME=N'F:\\ProjectFiles\\DataFiles\\ G5_luochuan0415\\PF_QuantityCharge.ndf',SIZE = 5MB, MAXSIZE = UNLIMITED,FILEGROWTH = 5MB) TO FILEGROUP [yalc_yygl]
--创建分区函数,分区函数是解决HOW(如何对数据进行分区)的问题 Create Partition Function PF_sMonthRange(varchar(6))
as range left for values('200909','200910') --n不能超过 999,创建的分区数等于 n + 1 创建分区方案,关联到分区函数 。分区方案是解决 where(在哪里对数据进行分区)的问题。
CREATE PARTITION SCHEME ps_sMonth AS PARTITION PF_sMonthRange ALL TO ([yalc_yygl])
创建分区表 IF
EXISTS
(SELECT
*
FROM
sys.objects
OBJECT_ID(N'[PS_QuantityCharge]') AND type in (N'U'))
Drop TABLE [PS_QuantityCharge]; CREATE TABLE [PS_QuantityCharge]( [ID] [varchar](50) NOT NULL, [sMonth] [varchar](6) NOT NULL, [CustomerID] [varchar](50) NULL, [YSDF] [money] NULL, [YHYE] [money] NULL, [ZDF] [money] NULL, [ZDL] [float] NULL, [ZCalcDF] [money] NULL, [TBDF] [money] NULL, [byqf] [money] NULL, [syye] [money] NULL, [Payment] [money] NULL, [CHECKDLDF] [float] NULL, [CalcCount] [int] NULL, [CalcFlag] [int] NULL,
[wyj_DerateMode] [varchar](50) NULL, [wyj_DerateRate] [float] NULL, [wyj_DerateValue] [float] NULL,
[DataDateTime] [datetime] NULL DEFAULT(getdate()),
Constraint PK_PS_QuantityCharge Primary key(id,sMonth) ) on ps_sMonth(sMonth)
WHERE
object_id
=
IF
EXISTS(SELECT
*
FROM
sys.objects
WHERE
object_id
OBJECT_ID(N'[PS_QuantityChargeHistory]') AND type in (N'U'))
Drop TABLE [PS_QuantityChargeHistory]; CREATE TABLE [PS_QuantityChargeHistory]( [ID] [varchar](50) NOT NULL, [sMonth] [varchar](6) not NULL, [CustomerID] [varchar](50) NULL, [YSDF] [money] NULL, [YHYE] [money] NULL, [ZDF] [money] NULL, [ZDL] [float] NULL, [ZCalcDF] [money] NULL, [TBDF] [money] NULL, [byqf] [money] NULL, [syye] [money] NULL, [Payment] [money] NULL, [CHECKDLDF] [float] NULL, [CalcCount] [int] NULL, [CalcFlag] [int] NULL,
[wyj_DerateMode] [varchar](50) NULL, [wyj_DerateRate] [float] NULL, [wyj_DerateValue] [float] NULL,
[DataDateTime] [datetime] NULL DEFAULT(getdate()),
Constraint PK_PS_QuantityChargeHistory Primary key(id,sMonth)
) on ps_sMonth(sMonth)
--查看分区是否成功 SELECT
*
FROM
SYS.PARTITIONS
WHERE
OBJECT_ID
OBJECT_ID('[PS_QuantityCharge]')
SELECT
*
FROM
SYS.PARTITIONS
WHERE
OBJECT_ID
OBJECT_ID('[PS_QuantityChargeHistory]')
=
=
=