--查看每个分区的数据分布情况
SELECT partition = $partition .PF_sMonthRange(sMonth), rows = count(*), minval = min(sMonth), maxval = max(sMonth) FROM [PS_QuantityCharge]
GROUP BY $partition .PF_sMonthRange(sMonth) ORDER BY partition
--查询某个分区有多少行数据
SELECT $PARTITION.PF_sMonthRange(sMonth) AS Partition, COUNT(*) AS [COUNT] FROM [PS_QuantityChargeHistory]
GROUP BY $PARTITION.PF_sMonthRange(sMonth) ORDER BY Partition ;
--通过以下三个视图来观察我们创建的分区函数,分区方案,边界点值等元数据 select * from sys.partition_functions select * from sys.partition_range_values select * from sys.partition_schemes
切换分区表的一个分区到普通数据表中:Partition to Table --创建普通表 IF
EXISTS
(SELECT
*
FROM
sys.objects
WHERE
object_id
=
OBJECT_ID(N'[PS_QuantityCharge200911]') AND type in (N'U'))
Drop TABLE [PS_QuantityCharge200911]; CREATE TABLE [PS_QuantityCharge200911](
[ID] [varchar](50) NOT NULL, [sMonth] [varchar](6) NOT NULL, [CustomerID] [varchar](50) NULL, [YSDF] [money] NULL, [YHYE] [money] NULL, [ZDF] [money] NULL, [ZDL] [float] NULL, [ZCalcDF] [money] NULL, [TBDF] [money] NULL, [byqf] [money] NULL, [syye] [money] NULL,
[Payment] [money] NULL, [CHECKDLDF] [float] NULL, [CalcCount] [int] NULL, [CalcFlag] [int] NULL,
[wyj_DerateMode] [varchar](50) NULL, [wyj_DerateRate] [float] NULL, [wyj_DerateValue] [float] NULL,
[DataDateTime] [datetime] NULL DEFAULT(getdate()),
Constraint PK_PS_QuantityCharge200911 Primary key(id,sMonth) ) on yalc_yygl
值得注意的是,如果你想顺利地进行分区到普通表的切换,最好满足以下的前提条件: 1. 普通表必须建立在分区表切换分区所在的文件组上。 2. 普通表的表结构跟分区表的一致; 3. 普通表上的索引要跟分区表一致; 4. 普通表必须是空表,不能有任何数据; 切换分区到普通表
alter table PS_QuantityChargeHistory switch partition 2 to PS_QuantityCharge200911 切换普通表到分区表
5. 普通表必须加上和分区数据范围一致的check 约束条件;
alter table PS_QuantityCharge200911 add constraint CK_PS_QuantityCharge200911 check (sMonth='200910' or sMonth='200911') 切换到分区表
alter table PS_QuantityCharge200911 switch to PS_QuantityChargeHistory partition 2 --分区到分区
alter table PS_QuantityChargeHistory switch partition 1 to PS_QuantityCharge partition 1 添加分区
ALTER PARTITION FUNCTION PF_sMonthRange() SPLIT RANGE ('200912') 合并分区
ALTER PARTITION FUNCTION PF_sMonthRange() MERGE RANGE ('200910')
通过图形我们来回忆下归档数据、添加分区、合并分区:
实际上,分区表分区切换并没有真正去移动数据,而是 SQL Server 在系统底层改变了表的元数据。因此分区表分区切换是高效、快速、灵活的。利用分区表的分区切换功能,我们可以快速加载 数据到分区表。卸载分区数据到普通表,然后 truncate 普通表,以实现快速删除分区表数据。快速归档不活跃数据到历史表。
上述所有资料均来自于互联网,在此衷心地表示感谢他们的辛勤劳动和无私的奋献。