在SQL Server中,对超级大表做数据归档,使用select和delete命令是十分耗费CPU时间和Disk空间的,SQL Server必须记录相应数量的事务日志,而使用switch操作归档分区表的老数据,十分高效,switch操作不会移动数据,只是做元数据的置换,因此,执行分区切换操作的时间是非常短暂的,几乎是瞬间完成,但是,在做分区切换时,源表和靶表必须满足一定的条件:

  • 表的结构相同:列的数据类型,可空性(nullability)相同;
  • 索引结构必须相同:索引键的结构,聚集性,唯一性,列的可空性必须相同;
    • 主键约束:如果源表存在主键约束,那么靶表必须创建等价的主键约束;
    • 唯一约束:唯一约束可以使用唯一索引来实现;
    • 索引键的结构:索引键的顺序,包含列,唯一性,聚集性都必须相同;
  • 存储的数据空间(data space)相同:源表和靶表必须创建在相同的FileGroup或Partition Scheme上;

分区切换是将源表中的一个分区,切换到靶表(target_table)中,靶表可以是分区表,也可以不是分区表,switch操作的语法是:

ALTER TABLE schema_name . table_name 
SWITCH [ PARTITION source_partition_number_expression ]
TO target_table  [ PARTITION target_partition_number_expression ]

一,创建示例数据

-- create parition function
create partition function pf_int_left (int)
as range left 
for values (10,20);

--create partition scheme
create partition scheme ps_int_left
as 
partition pf_int_left
all to ([primary]);

--create partitioned table
create table dbo.dt_partition
(
ID int null,
Code int null
)
on ps_int_left (id)

--Create staging table
create table dbo.dt_SwitchStaging
(
ID int null,
Code int null
)
on [primary]
View Code

相关文章:

  • 2021-08-09
  • 2021-04-27
  • 2021-11-02
  • 2022-12-23
  • 2021-09-24
  • 2021-12-15
猜你喜欢
  • 2021-12-19
  • 2021-06-12
  • 2022-12-23
  • 2021-10-12
  • 2022-12-23
  • 2021-10-01
相关资源
相似解决方案