2023年11月26日发(作者:)

sqlserver分区表之合并分区

在前⾯我们介绍过如何创建和使⽤⼀个分区表,并举了⼀个例⼦,将不 同年份的数据放在不同的物理分区表⾥。具体的分区⽅式为:

1个⼩表:2010-1-1以前的数据(不包含2010-1-1)。

2个⼩表:2010-1-1(包含2010-1-1)到2010-12-31之间的数据。

3个⼩表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据。

4个⼩表:2012-1-1(包含2012-1-1)到2012-12-31之间的数据。

5个⼩表:2013-1-1(包含2013-1-1)之后的数据。

分区函数的代码如下所⽰:

[c-sharp]

01. CREATE PARTITION FUNCTION partfunSale (datetime) AS RANGE RIGHT FOR VALUES (

假设我们在创建分区表之后发现,2010年以前的数据并不多,完全可以将它们与2010年的数据进⾏合并,放在同⼀个分区⾥,也就是

说,具体的分区⽅式改为:

1个⼩表:2011-1-1以前的数据(不包含2011-1-1)。

2个⼩表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据。

3个⼩表:2012-1-1(包含2012-1-1)到2012-12-31之间的数据。

4个⼩表:2013-1-1(包含2013-1-1)之后的数据。

由于上⾯的需求更改了数据分区的条件,因此,我们必须要修改分区函数,因为分区函数的作⽤就是要来告诉SQL Server怎么存放数据

的。只要分区函数修改了,SQL Server会⾃动将数据重新分配,按照新的分区函数指定的⽅式来存储数据。

先假设我们还没有创建过分区表,要满⾜上⾯的条件,我们必须要写出如下代码的创建分区函数的SQL语句

[c-sharp]

01. CREATE PARTITION FUNCTION partfunSale (datetime)

02. AS RANGE RIGHT FOR VALUES ('20110101','20120101','20130101')

⽐较⼀个新的分区函数和⽼的分区函数,看看他们有什么区别?

的确,我们很容易就可以发现,⽼的分区函数⾥多了⼀个分界值——也就是'20100101'。那么,修改⽼的分区函数,事实上就是将这分界

值删除。简单⼀点说,删除(合并)⼀个分区,事实上就是在分区函数中将多余的分界值删除。

删除分区函数中的分界值,也就是修改分区函数的⽅法如下所⽰:

[c-sharp]

01. ALTER PARTITION FUNCTION partfunSale()

02. MERGE RANGE ('20100101')

其中:

1ALTER PARTITION FUNCTION 意思是修改分区函数

2partfunSale()为分区函数名

3MERGE RANGE意思是合并界限。事实上,合并界限和删除分界值是⼀个意思。

我们可以在修改分区函数时先统计⼀下各物理分区中的记录总数,在修改分区之后,再统计⼀下各物理分区中的记录总数,看⼀下修改分

区函数后的数据变化情况,代码如下所⽰:

[c-sharp]

01. --统计所有分区表中的记录总数

02. select $nSale(SaleTime) as 分区编号,count(id) as 记录

03. --原来的分区函数是将2010-1-1之前的数据放在第1个分区表中,将2010-1-12011-1-1

04. --现在需要将2011-1-1之前的数据都放在第1个分区表中,也就是将第1个分区表和第2

05. --修改分区函数

06. ALTER PARTITION FUNCTION partfunSale()

07. MERGE RANGE ('20100101')

08. --统计所有分区表中的记录总数

09. select $nSale(SaleTime) as 分区编号,count(id) as 记录

from Sale group by $nSale(SaleTime)

之间的数据放在第2个分区表中

分区表中的数据合并

from Sale group by $nSale(SaleTime)

运⾏结果如下图所⽰:

现在还有⼀个问题,就是通过修改分区函数合并数据之后,数据都存放在哪⾥了?在修改之前,数据分别存放在⽂件组Sale2009

Sale2010中,修改之后,数据放到哪⾥去了呢?

事实上,在修改分区函数之后,SQL Server也会⾃动修改分区⽅案,将处于两个物理分区中的数据放在同⼀个物理分区⾥了。可以通过查

看分区⽅案的⽅式来查看数据具体的存放位置。

查看分区⽅案的⽅式为:在SQL Server Management Studio中,选择数据库-->存储-->分区⽅案,右击分区⽅案名,在弹出的菜单中选

编写分区⽅案脚本为”-->CREATE-->新查询编辑器窗⼝

然后在新查询编辑器窗⼝可以看到下图代码。

从上图中可以看出,分区⽅案将原来Sale2010⽂件组中的数据合并到了Sale2009⽂件组中。