sql2005表分区之增加分区

时间:2021-04-02 22:58:11

表分区的建立参考
http://www.databasejournal.com/features/mssql/article.php/3640891

1,创建分区

sql2005表分区之增加分区创建分区
sql2005表分区之增加分区
USE   [ master ]
sql2005表分区之增加分区
GO
sql2005表分区之增加分区sql2005表分区之增加分区
/**/ /**/ /**/ /****** Object:  Database [Data Partition DB]    Script Date: 10/08/2006 23:09:53 ******/
sql2005表分区之增加分区
IF    EXISTS  ( SELECT  name  FROM  sys.databases  WHERE  name  =  N ' Data Partition DB2 ' )
sql2005表分区之增加分区
DROP   DATABASE   [ Data Partition DB2 ]
sql2005表分区之增加分区
GO
sql2005表分区之增加分区 
CREATE   DATABASE   [ Data Partition DB2 ]
sql2005表分区之增加分区      
ON   PRIMARY
sql2005表分区之增加分区       (NAME
= ' Data Partition DB Primary FG ' ,
sql2005表分区之增加分区        FILENAME
=
sql2005表分区之增加分区          
' C:Data2PrimaryData Partition DB Primary FG.mdf ' ,
sql2005表分区之增加分区        SIZE
= 5 ,
sql2005表分区之增加分区        MAXSIZE
= 500 ,
sql2005表分区之增加分区        FILEGROWTH
= 1  ),
sql2005表分区之增加分区      FILEGROUP 
[ Data Partition DB FG1 ]
sql2005表分区之增加分区       (NAME 
=   ' Data Partition DB FG1 ' ,
sql2005表分区之增加分区        FILENAME 
=
sql2005表分区之增加分区         
' C:Data2FG1Data Partition DB FG1.ndf ' ,
sql2005表分区之增加分区        SIZE 
=  5MB,
sql2005表分区之增加分区        MAXSIZE
= 500 ,
sql2005表分区之增加分区        FILEGROWTH
= 1  ),
sql2005表分区之增加分区      FILEGROUP 
[ Data Partition DB FG2 ]
sql2005表分区之增加分区       (NAME 
=   ' Data Partition DB FG2 ' ,
sql2005表分区之增加分区        FILENAME 
=
sql2005表分区之增加分区         
' C:Data2FG2Data Partition DB FG2.ndf ' ,
sql2005表分区之增加分区        SIZE 
=  5MB,
sql2005表分区之增加分区        MAXSIZE
= 500 ,
sql2005表分区之增加分区        FILEGROWTH
= 1  ),
sql2005表分区之增加分区      FILEGROUP 
[ Data Partition DB FG3 ]
sql2005表分区之增加分区       (NAME 
=   ' Data Partition DB FG3 ' ,
sql2005表分区之增加分区        FILENAME 
=
sql2005表分区之增加分区         
' C:Data2FG3Data Partition DB FG3.ndf ' ,
sql2005表分区之增加分区        SIZE 
=  5MB,
sql2005表分区之增加分区        MAXSIZE
= 500 ,
sql2005表分区之增加分区        FILEGROWTH
= 1  ),
sql2005表分区之增加分区      FILEGROUP 
[ Data Partition DB FG4 ]
sql2005表分区之增加分区       (NAME 
=   ' Data Partition DB FG4 ' ,
sql2005表分区之增加分区        FILENAME 
=
sql2005表分区之增加分区         
' C:Data2FG4Data Partition DB FG4.ndf ' ,
sql2005表分区之增加分区        SIZE 
=  5MB,
sql2005表分区之增加分区        MAXSIZE
= 500 ,
sql2005表分区之增加分区        FILEGROWTH
= 1  )

2,创建分区函数 

sql2005表分区之增加分区use   [ Data Partition DB2 ]
sql2005表分区之增加分区
GO
sql2005表分区之增加分区
CREATE  PARTITION  FUNCTION   [ Data Partition Range ] ( int )
sql2005表分区之增加分区        
AS  RANGE  LEFT   FOR   VALUES  ( 100 , 200 , 300 )

 3,创建分区架构

sql2005表分区之增加分区USE   [ Data Partition DB2 ]
sql2005表分区之增加分区
go
sql2005表分区之增加分区
CREATE  PARTITION SCHEME  [ Data Partition Scheme ]
sql2005表分区之增加分区        
AS  PARTITION  [ Data Partition Range ]
sql2005表分区之增加分区        
TO  ( [ Data Partition DB FG1 ] [ Data Partition DB FG2 ] [ Data Partition DB FG3 ] , [ Data Partition DB FG4 ] );

4,创建表

sql2005表分区之增加分区USE   [ Data Partition DB2 ]
sql2005表分区之增加分区
go
sql2005表分区之增加分区
CREATE   TABLE  MyTable
sql2005表分区之增加分区       (ID 
INT   NOT   NULL ,
sql2005表分区之增加分区        Date 
DATETIME ,
sql2005表分区之增加分区        Cost 
money )
sql2005表分区之增加分区      
ON   [ Data Partition Scheme ]  (ID);

5,创建聚合索引

sql2005表分区之增加分区USE   [ Data Partition DB2 ]
sql2005表分区之增加分区
go
sql2005表分区之增加分区
CREATE   UNIQUE   CLUSTERED   INDEX  MyTable_IXC
sql2005表分区之增加分区       
ON  MyTable(ID)
sql2005表分区之增加分区       
ON   [ Data Partition Scheme ]   (ID)

分区函数共有三个分临界值:100,200,300,有四个文件组[Data Partition DB FG1]到[... FG4],存储规则如下:

分区号 范围  文件组名
1 x<=100 [Data Partition DB FG1]
2 100<x<=200 [Data Partition DB FG2]
3 200<x<=300 [Data Partition DB FG3]
4 300<x [Data Partition DB FG4]


现在要求加入500这个临界值,并加入文件组[Data Partition DB FG5],如下操作:
1,建立文件组:

sql2005表分区之增加分区ALTER   DATABASE   [ Data Partition DB2 ] ADD  FILEGROUP   [ Data Partition DB FG5 ]
sql2005表分区之增加分区
ALTER   DATABASE   [ Data Partition DB2 ] ADD   FILE (NAME = ' Data Partition DB FG5 ' ,
sql2005表分区之增加分区FILENAME
= ' D:DatabaseData Partition DB FG5.ndf ' TO  FILEGROUP  [ Data Partition DB FG5 ] ;

2,更改分区架构

sql2005表分区之增加分区ALTER  PARTITION SCHEME   [ Data Partition Scheme ]
sql2005表分区之增加分区
NEXT  USED  [ Data Partition DB FG5 ] ;

3,更改分区函数

sql2005表分区之增加分区ALTER  PARTITION  FUNCTION    [ Data Partition Range ] ( int )
sql2005表分区之增加分区SPLIT RANGE (
500

 

 然后我们来看有什么变化:
分区架构:

sql2005表分区之增加分区USE   [ Data Partition DB2 ]
sql2005表分区之增加分区
GO
sql2005表分区之增加分区
CREATE  PARTITION SCHEME  [ Data Partition Scheme ]   AS  PARTITION  [ Data Partition Range ]  
sql2005表分区之增加分区
TO  ( [ Data Partition DB FG1 ]
sql2005表分区之增加分区
[ Data Partition DB FG2 ]
sql2005表分区之增加分区
[ Data Partition DB FG3 ]
sql2005表分区之增加分区
[ Data Partition DB FG5 ]
sql2005表分区之增加分区
[ Data Partition DB FG4 ] )
分区函数:
sql2005表分区之增加分区USE   [ Data Partition DB2 ]
sql2005表分区之增加分区
GO
sql2005表分区之增加分区
CREATE  PARTITION  FUNCTION   [ Data Partition Range ] ( int AS  RANGE  LEFT   FOR   VALUES  ( 100 200 300 500 )

这时的存储规则:

分区号 范围  文件组名
1 x<=100 [Data Partition DB FG1]
2 100<x<=200 [Data Partition DB FG2]
3 200<x<=300 [Data Partition DB FG3]
4 300<x<=500 [Data Partition DB FG5]
5 500<x [Data Partition DB FG4]

可以看到新加的文件组并没有排到最后一们,而FG4成为新的临界点。那我们加入新的临界点400呢,
变化如下
分区架构:
sql2005表分区之增加分区USE   [ Data Partition DB2 ]
sql2005表分区之增加分区
GO
sql2005表分区之增加分区
CREATE  PARTITION SCHEME  [ Data Partition Scheme ]   AS  PARTITION  [ Data Partition Range ]  
sql2005表分区之增加分区
TO  ( [ Data Partition DB FG1 ]
sql2005表分区之增加分区
[ Data Partition DB FG2 ]
sql2005表分区之增加分区
[ Data Partition DB FG3 ]
sql2005表分区之增加分区
[ Data Partition DB FG5 ]
sql2005表分区之增加分区    
[ Data Partition DB FG6 ]
sql2005表分区之增加分区
[ Data Partition DB FG4 ] )

分区函数:

sql2005表分区之增加分区USE   [ Data Partition DB2 ]
sql2005表分区之增加分区
GO
sql2005表分区之增加分区
CREATE  PARTITION  FUNCTION   [ Data Partition Range ] ( int AS  RANGE  LEFT   FOR   VALUES  ( 100 200 300 , 400 500 )

存储规则将变为

分区号 范围  文件组名
1 x<=100 [Data Partition DB FG1]
2 100<x<=200 [Data Partition DB FG2]
3 200<x<=300 [Data Partition DB FG3]
4 300<x<=400 [Data Partition DB FG5]
5 400<x<=500 [Data Partition DB FG6]
6 500<x [Data Partition DB FG4]

所以对于具体时间维的数据仓库来说,时间做为临界点,是不断增加的,我们一开始创建事实表分区时,最后一个分区应该叫做类似[Data Partiotion DB FG LAST]的名称,

最后,有一个问题还没有实践,对于一个有1000w条记录的文件组,用一个文件保存和用十个文件保存,查询效率会有什么样的不同呢?