SQL SERVER 2005表分区创建示例

来源:互联网 发布:中国智库网络影响力 编辑:程序博客网 时间:2024/05/21 17:55
-- 创建要使用的测试数据库,DemoUSE [master]IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'DEMO')DROP DATABASE [DEMO]CREATE DATABASE [DEMO]--由于表分区使用使用新的体系结构,使用文件组来进行表分区,所以我们创建将要用到的6个文件组,来存储6个时间段的交易数据[<2000],[ 2001], [2002], [2003], [2004], [>2005]ALTER DATABASE Demo ADD FILEGROUP YEARFG1;ALTER DATABASE Demo ADD FILEGROUP YEARFG2;ALTER DATABASE Demo ADD FILEGROUP YEARFG3;ALTER DATABASE Demo ADD FILEGROUP YEARFG4;ALTER DATABASE Demo ADD FILEGROUP YEARFG5;ALTER DATABASE Demo ADD FILEGROUP YEARFG6;-- 下面为这些文件组添加文件来进行物理的数据存储ALTER DATABASE Demo ADD FILE (NAME = 'YEARF1', FILENAME = 'C:\ADVWORKSF1.NDF') TO FILEGROUP YEARFG1;ALTER DATABASE Demo ADD FILE (NAME = 'YEARF2', FILENAME = 'C:\ADVWORKSF2.NDF') TO FILEGROUP YEARFG2;ALTER DATABASE Demo ADD FILE (NAME = 'YEARF3', FILENAME = 'C:\ADVWORKSF3.NDF') TO FILEGROUP YEARFG3;ALTER DATABASE Demo ADD FILE (NAME = 'YEARF4', FILENAME = 'C:\ADVWORKSF4.NDF') TO FILEGROUP YEARFG4;ALTER DATABASE Demo ADD FILE (NAME = 'YEARF5', FILENAME = 'C:\ADVWORKSF5.NDF') TO FILEGROUP YEARFG5;ALTER DATABASE Demo ADD FILE (NAME = 'YEARF6', FILENAME = 'C:\ADVWORKSF6.NDF') TO FILEGROUP YEARFG6;-- HERE WE ASSOCIATE THE PARTITION FUNCTION TO-- THE CREATED FILEGROUP VIA A PARTITIONING SCHEMEgoUSE DEMO;GO--------------------------------------------------------- 创建分区函数-------------------------------------------------------CREATE PARTITION FUNCTION YEARPF(datetime)ASRANGE LEFT FOR VALUES ('01/01/2000','01/01/2001','01/01/2002','01/01/2003','01/01/2004')--------------------------------------------------------- 创建分区架构-------------------------------------------------------CREATE PARTITION SCHEME YEARPSAS PARTITION YEARPF TO (YEARFG1, YEARFG2,YEARFG3,YEARFG4,YEARFG5,YEARFG6)-- 创建使用此Schema的表CREATE TABLE PARTITIONEDORDERS(ID INT NOT NULL IDENTITY(1,1),DUEDATE DATETIME NOT NULL,) ON YEARPS(DUEDATE)--为此表填充数据declare @DT datetimeSELECT @DT = '1999-01-01'--start looping, stop at ending dateWHILE (@DT <= '2005-12-21')BEGININSERT INTO PARTITIONEDORDERS VALUES(@DT)SET @DT=dateadd(yy,1,@DT)END-- 现在我们可以看一下我们刚才插入的行都分布在哪个PartitionSELECT *, $PARTITION.YEARPF(DUEDATE) FROM PARTITIONEDORDERS--我们可以看一下我们现在PARTITIONEDORDERS表的数据存储在哪此partition中,以及在这些分区中数据量的分布SELECT * FROM SYS.PARTITIONS WHERE OBJECT_ID = OBJECT_ID('PARTITIONEDORDERS')--现在我们设想一下,如果我们随着时间的流逝,现在已经到了2005年,按照我们先前的设定,我们想再想入一个分区,这时是不是重新创建表分区架构然后重新把数据导放到新的分区架构呢,答案是完全不用。下面我们就看如果新加一个分区。--更改分区架构定义语言,让下一个分区使用和现在已经存在的分区YEARFG6分区中,这样此分区就存储了两段partition的数据。ALTER PARTITION SCHEME YEARPSNEXT USED YEARFG6;--更改分区函数ALTER PARTITION FUNCTION YEARPF()SPLIT RANGE ('01/01/2005')--现在我们可以看一下我们刚才插入的行都分布在哪个Partition?SELECT *, $PARTITION.YEARPF(DUEDATE) FROM PARTITIONEDORDERS--我们可以看一下我们现在PARTITIONEDORDERS表的数据存储在哪此partition中,以及在这些分区中数据量的分布SELECT * FROM SYS.PARTITIONS WHERE OBJECT_ID = OBJECT_ID('PARTITIONEDORDERS')

原创粉丝点击