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')
其中:
1、ALTER PARTITION FUNCTION 意思是修改分区函数
2、partfunSale()为分区函数名
3、MERGE RANGE意思是合并界限。事实上,合并界限和删除分界值是⼀个意思。
我们可以在修改分区函数时先统计⼀下各物理分区中的记录总数,在修改分区之后,再统计⼀下各物理分区中的记录总数,看⼀下修改分
区函数后的数据变化情况,代码如下所⽰:
[c-sharp]
01. --统计所有分区表中的记录总数
02. select $nSale(SaleTime) as 分区编号,count(id) as 记录
03. --原来的分区函数是将2010-1-1之前的数据放在第1个分区表中,将2010-1-1⾄2011-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⽂件组中。


发布评论