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

120

被折叠的 条评论
为什么被折叠?



