SQL Server 2005中的分区表(四):删除(合并)一个分区
来源:互联网 发布:淘宝会员v3等级 编辑:程序博客网 时间:2024/05/16 16:03
第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)之后的数据。
分区函数的代码如下所示:
- CREATE PARTITION FUNCTION partfunSale (datetime) AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101')
假设我们在创建分区表之后发现,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语句
- CREATE PARTITION FUNCTION partfunSale (datetime)
- AS RANGE RIGHT FOR VALUES ('20110101','20120101','20130101')
比较一个新的分区函数和老的分区函数,看看他们有什么区别?
的确,我们很容易就可以发现,老的分区函数里多了一个分界值——也就是'20100101'。那么,修改老的分区函数,事实上就是将这分界值删除。简单一点说,删除(合并)一个分区,事实上就是在分区函数中将多余的分界值删除。
删除分区函数中的分界值,也就是修改分区函数的方法如下所示:
- ALTER PARTITION FUNCTION partfunSale()
- MERGE RANGE ('20100101')
其中:
1、ALTER PARTITION FUNCTION 意思是修改分区函数
2、partfunSale()为分区函数名
3、MERGE RANGE意思是合并界限。事实上,合并界限和删除分界值是一个意思。
我们可以在修改分区函数时先统计一下各物理分区中的记录总数,在修改分区之后,再统计一下各物理分区中的记录总数,看一下修改分区函数后的数据变化情况,代码如下所示:
- --统计所有分区表中的记录总数
- select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
- --原来的分区函数是将2010-1-1之前的数据放在第1个分区表中,将2010-1-1至2011-1-1之间的数据放在第2个分区表中
- --现在需要将2011-1-1之前的数据都放在第1个分区表中,也就是将第1个分区表和第2个分区表中的数据合并
- --修改分区函数
- ALTER PARTITION FUNCTION partfunSale()
- MERGE RANGE ('20100101')
- --统计所有分区表中的记录总数
- select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
运行结果如下图所示:
现在还有一个问题,就是通过修改分区函数合并数据之后,数据都存放在哪里了?在修改之前,数据分别存放在文件组Sale2009和Sale2010中,修改之后,数据放到哪里去了呢?
事实上,在修改分区函数之后,SQL Server也会自动修改分区方案,将处于两个物理分区中的数据放在同一个物理分区里了。可以通过查看分区方案的方式来查看数据具体的存放位置。
查看分区方案的方式为:在SQL Server Management Studio中,选择数据库-->存储-->分区方案,右击分区方案名,在弹出的菜单中选择“编写分区方案脚本为”-->CREATE到-->新查询编辑器窗口
然后在新查询编辑器窗口可以看到下图代码。
从上图中可以看出,分区方案将原来Sale2010文件组中的数据合并到了Sale2009文件组中。
相关链接:
SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?
SQL Server 2005中的分区表(二):如何添加、查询、修改分区表中的数据
SQL Server 2005中的分区表(三):将普通表转换成分区表
SQL Server 2005中的分区表(四):删除(合并)一个分区
SQL Server 2005中的分区表(五):添加一个分区
SQL Server 2005中的分区表(六):将已分区表转换成普通表
- SQL Server 2005中的分区表(四):删除(合并)一个分区
- SQL Server 2005中的分区表(四):删除(合并)一个分区
- SQL Server 2005中的分区表(四):删除(合并)一个分区
- SQL Server 2005中的分区表(四):删除(合并)一个分区
- SQL Server 2008中的分区表(四):删除(合并)一个分区
- SQL Server 中的分区表(四):删除(合并)一个分区
- SQL Server 2005中的分区表(五):添加一个分区
- SQL Server 2005中的分区表(五):添加一个分区
- SQL Server 2005中的分区表(五):添加一个分区
- SQL Server 2005中的分区表(五):添加一个分区
- SQL Server 2005中的分区表(五):添加一个分区
- SQL Server 2008中的分区表(五):添加一个分区
- SQL Server 中的分区表(五):添加一个分区
- SQL Server 2005中的分区表:添加一个分区
- SQL Server 合并(删除)分区解惑
- sql server 分区表之合并分区
- SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?
- SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?
- 使用DLL在进程间共享数据
- awr查看采集的频率和保有存的天数SQL语句
- BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别
- Ubuntu11.10 禁止触摸板
- 手机系统消息通知设计的整理和分析
- SQL Server 2005中的分区表(四):删除(合并)一个分区
- android:layout_gravity 和 android:gravity 的区别
- arm-none-linux-gnueabi-gcc【实验环境】 1、 Ubuntu 10.10发行版 2、 FS2410平台 【实验步骤】
- KDD CUP 99 数据集背景知识
- 转CInternetSession的代理与超时使用
- oracle正则表达式
- SOCKET编程进阶之Overlapped I\O事件通知模型
- 楼梯台阶问题解法
- 从WebResponse获取源文件名、扩展名