博客
关于我
Partition2:对现有表分区
阅读量:439 次
发布时间:2019-03-06

本文共 2807 字,大约阅读时间需要 9 分钟。

在SQL Server中,普通表可以通过特定操作转化为分区表,而分区表则无法转化为普通表。这种转换过程具有不可逆性,一旦完成,普通表将变为分区表,无法恢复。以下是将普通表转化为分区表的主要方法和注意事项。

一、分区架构的基础配置

在进行转换之前,确保数据库已存在分区函数和分区架构。以下是常见的分区函数和架构示例:

-- 创建分区函数CREATE PARTITION FUNCTION pf_int_Left (int)     AS RANGE LEFT FOR VALUES (10, 20);-- 创建分区架构CREATE PARTITION SCHEME PS_int_Left     AS PARTITION pf_int_Left     TO ([primary], [primary], [primary]);

二、转换普通表为分区表的具体方法

如果普通表已经存在聚集索引且聚集索引列是分区列,可以通过以下步骤将其转化为分区表:

1. 删除非聚集索引

在进行转换之前,建议删除所有非聚集索引,以减少潜在的冲突和影响。

2. 删除聚集索引并重建

如果聚集索引是通过CREATE CLUSTERED INDEX命令创建的,并且索引列即为分区列,可以按照以下步骤操作:

-- 删除现有的聚集索引DROP CLUSTERED INDEX cix_dt_partition_ID;-- 在分区架构上重建聚集索引CREATE CLUSTERED INDEX cix_dt_partition_ID     ON dbo.dt_partition(ID)    ON PS_int_Left(ID);

3. 查看分区数量

在完成转换后,验证表的分区数量是否已正确分配:

SELECT * FROM sys.partitions p     WHERE p.object_id = OBJECT_ID(N'dbo.dt_partition', N'U');

4. 确认分区架构

确保表的聚集索引已正确绑定到分区架构:

SELECT o.name AS TableName, i.name AS IndexName,        i.index_id, i.type_desc, ds.name AS DataSpaceName, ds.type_descFROM sys.indexes i    INNER JOIN sys.objects o ON o.object_id = i.object_id    INNER JOIN sys.data_spaces ds ON i.data_space_id = ds.data_space_idWHERE i.object_id = OBJECT_ID(N'dbo.dt_partition', N'U')    AND i.index_id = 0;

三、处理Primary Key作为分区列的情况

如果表的聚集索引是通过Primary Key约束创建的,并且Primary Key列即为分区列,转换过程有所不同:

1. 删除Primary Key约束并移动数据

使用ALTER TABLE命令删除约束,并将数据移动到分区架构上:

ALTER TABLE schema_name.table_name    DROP [CONSTRAINT] constraint_name    [WITH (MOVE TO { partition_scheme_name(partition_column_name ) | filegroup | [default] } )];

2. 重新创建Primary Key约束

在分区架构上重新创建Primary Key约束:

CREATE TABLE dbo.dt_partition_pk    (ID int NOT NULL Constraint pk__dt_partition_ID Primary Key CLUSTERED,     Code int NOT NULL)    ALTER TABLE dbo.dt_partition_pk        DROP Constraint pk__dt_partition_ID        ALTER TABLE dbo.dt_partition_pk            ADD Constraint pk__dt_partition_ID Primary Key CLUSTERED (ID)            ON PS_int_Left(ID);

四、处理堆表转换为分区表

对于堆表(没有聚集索引),转换为分区表的方法如下:

CREATE TABLE dbo.dt_partition_heap    (ID int NOT NULL,     Code int NOT NULL)    CREATE CLUSTERED INDEX cix_partition_heap_ID        ON dbo.dt_partition_heap(ID)        ON PS_int_Left(ID);

五、转换过程的不可逆性

需要注意的是,转换过程是不可逆的。一旦普通表被转化为分区表,无法恢复。分区表的数据存储在Partition Scheme上,而非原有的File Group。分区表的数据分布在多个File Group中,具体取决于Partition Scheme的配置。

六、验证数据存储空间

通过以下命令可以查看表的数据存储空间信息:

SELECT o.name AS TableName, o.type_desc AS TableType,       i.name AS IndexName, i.type_desc AS IndexType,       i.index_id, i.data_space_id,       ds.name AS DataSpaceName, ds.type_desc AS DataSpaceTypeFROM sys.indexes i    INNER JOIN sys.objects o ON o.object_id = i.object_id    INNER JOIN sys.data_spaces ds ON i.data_space_id = ds.data_space_idWHERE i.object_id = OBJECT_ID(N'dbo.dt_partition', N'U')    AND i.index_id = 0;

在分区完成后,表的数据存储空间应显示为PS_int Partition Scheme,而非原始的Primary File Group

转载地址:http://vixyz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现ABC人工蜂群算法(附完整源码)
查看>>
Objective-C实现activity selection活动选择问题算法(附完整源码)
查看>>
Objective-C实现adaboost算法(附完整源码)
查看>>
Objective-C实现Adler32算法(附完整源码)
查看>>
Objective-C实现AffineCipher仿射密码算法(附完整源码)
查看>>
Objective-C实现all combinations所有组合算法(附完整源码)
查看>>
Objective-C实现all permutations所有排列算法(附完整源码)
查看>>
Objective-C实现all subsequences所有子序列算法(附完整源码)
查看>>
Objective-C实现AlphaNumericalSort字母数字排序算法(附完整源码)
查看>>
Objective-C实现alternate disjoint set不相交集算法(附完整源码)
查看>>
Objective-C实现An Armstrong number阿姆斯特朗数算法(附完整源码)
查看>>
Objective-C实现anagrams字谜算法(附完整源码)
查看>>
Objective-C实现ApproximationMonteCarlo蒙特卡洛方法计算pi值算法 (附完整源码)
查看>>
Objective-C实现area under curve曲线下面积算法(附完整源码)
查看>>
Objective-C实现arithmetic算术算法(附完整源码)
查看>>
Objective-C实现armstrong numbers阿姆斯壮数算法(附完整源码)
查看>>
Objective-C实现articulation-points(关键点)(割点)算法(附完整源码)
查看>>
Objective-C实现atoi函数功能(附完整源码)
查看>>
Objective-C实现average absolute deviation平均绝对偏差算法(附完整源码)
查看>>
Objective-C实现average mean平均数算法(附完整源码)
查看>>