SqlServer将分区表转为普通表

本文介绍了如何在SQL Server中检查和管理分区表。首先,可以通过查看表属性来确认表是否被分区。接着,展示了如何使用SQL语句创建分区函数和分区方案。当需要将分区表转回普通表时,可以先删除索引,再重建,从而实现分区的取消。这个过程可能需要几分钟,具体取决于表的大小。

 
 查看一个表有没有被分区可以从表“右键>属性->存储(Storage)”中"Table is Partitioned "属性中看出

 可以通过有对原表进行分区的向导进行表的分区设置,右键表——存储——创建分区,然后一步一步都有提示,这里是说的通过sql 语句来创建    

 先 创建一个 分区函数 

 CREATE PARTITION FUNCTION PF_Table_Func(datetime)   AS RANGE LEFT FOR VALUES('2012-12-09 00:00:00','2012-12-10 00:00:00')

smalldatetime是要根据建分区的那列的数据类型,这里假设是datetime ,后面是分区的边界,其中有range left 和ange right 两种,就是"<" 和"<="的区别

 这里是有两个边界值,则有三个分区即  小于9号,大于等于9好小于10号 ,大于10号

--创建分区方案

CREATE PARTITION SCHEME PS_Scheme
AS PARTITION PF_Table_Func
ALL TO ([PRIMARY])    

Primary是文件组,一般来说,新建的数据默认就一个primary文件组,也可以自己添加新的文件组
将方案应用到相应的表上,这里根据表的大小,运行时间不一样,百万行大概要几分钟吧

CREATE CLUSTERED INDEX IX_Date ON Table1 --ix_date是表的聚集索引
(
Updatetime ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = ON, ONLINE = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PS_Scheme]([Datecol])-- Datecol(表中列)CREATE NONCLUSTERED INDEX  NIX_Id ON Table1  --NIX_Id --表的非聚集索引--这里不用附上方案
( 
ID ASC
 )
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON,ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)

这个时候 Table1表已经是分区表了,通过属性可以查看 table is Partitioned 属性是true了, 修改分区边界值增加边界
ALTER PARTITION SCHEME [PS_Scheme] NEXT USED [PRIMARY]
alter partition function  PF_Table_Func()
split range('2012-12-11')

删除(合并分区)

alter partition function PF_Table_Func()
merge range('2012-12-09')

如果要重新 对表进行分区就可以通过合并掉所有的边界,让表成初始状态即只要一个大分区,然后在进行新的边界建立即可

如果要将已经分区的表变成最初的状态即普通的没有分区的表
则可以先删除表的相关索引,
在上面已经将分区对齐到索引了,所以上面对齐的索引都要删除,然后重新建立表索引,
这个时候查看table is partitoned 又成false状态了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值