sql2005表分区之增加分区

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

1,创建分区

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

2,创建分区函数 

use   [ Data Partition DB2 ]
GO
CREATE  PARTITION  FUNCTION   [ Data Partition Range ] ( int )
        
AS  RANGE  LEFT   FOR   VALUES  ( 100 , 200 , 300 )

 3,创建分区架构

USE   [ Data Partition DB2 ]
go
CREATE  PARTITION SCHEME  [ Data Partition Scheme ]
        
AS  PARTITION  [ Data Partition Range ]
        
TO  ( [ Data Partition DB FG1 ] [ Data Partition DB FG2 ] [ Data Partition DB FG3 ] , [ Data Partition DB FG4 ] );

4,创建表

USE   [ Data Partition DB2 ]
go
CREATE   TABLE  MyTable
       (ID 
INT   NOT   NULL ,
        Date 
DATETIME ,
        Cost 
money )
      
ON   [ Data Partition Scheme ]  (ID);

5,创建聚合索引

USE   [ Data Partition DB2 ]
go
CREATE   UNIQUE   CLUSTERED   INDEX  MyTable_IXC
       
ON  MyTable(ID)
       
ON   [ Data Partition Scheme ]   (ID)

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

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


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

ALTER   DATABASE   [ Data Partition DB2 ] ADD  FILEGROUP   [ Data Partition DB FG5 ]
ALTER   DATABASE   [ Data Partition DB2 ] ADD   FILE (NAME = ' Data Partition DB FG5 ' ,
FILENAME
= ' D:DatabaseData Partition DB FG5.ndf ' TO  FILEGROUP  [ Data Partition DB FG5 ] ;

2,更改分区架构

ALTER  PARTITION SCHEME   [ Data Partition Scheme ]
NEXT  USED  [ Data Partition DB FG5 ] ;

3,更改分区函数

ALTER  PARTITION  FUNCTION    [ Data Partition Range ] ( int )
SPLIT RANGE (
500

 

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

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

这时的存储规则:

分区号范围 文件组名
1x<=100[Data Partition DB FG1]
2100<x<=200[Data Partition DB FG2]
3200<x<=300[Data Partition DB FG3]
4300<x<=500[Data Partition DB FG5]
5500<x[Data Partition DB FG4]

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

分区函数:

USE   [ Data Partition DB2 ]
GO
CREATE  PARTITION  FUNCTION   [ Data Partition Range ] ( int AS  RANGE  LEFT   FOR   VALUES  ( 100 200 300 , 400 500 )

存储规则将变为

分区号范围 文件组名
1x<=100[Data Partition DB FG1]
2100<x<=200[Data Partition DB FG2]
3200<x<=300[Data Partition DB FG3]
4300<x<=400[Data Partition DB FG5]
5400<x<=500[Data Partition DB FG6]
6500<x[Data Partition DB FG4]

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值