SQL Server 分区表的创建方法与管理

时间:2023-03-08 20:27:43

背景知识:

分区表、可以把表中的数据按范围保存到不同的文件组中。

举个例子吧:

2014年以前的数据保存到文件组A

2014~2015的数据保存到文件组B

2015年以后的数据保存到文件组C

好处:

1、提高IO性能 --- 文件组中的文件可以位于不同的磁盘,多磁盘协同工作,提升性能。

2、方便管理 --- 备份方面为管理提供了更多的选择,数据归档方便。

前期准备:添加文件组与文件

alter database Studio
             add filegroup FG1;
             go

alter database Studio
             add filegroup FG2;
             go

alter database Studio
             add filegroup FG3;
             go

alter database Studio
             add file(name = FG1_File,filename='E:\DB\FG1_File.ndf');
             go

alter database Studio
             add file(name = FG2_File,filename='E:\DB\FG2_File.ndf');
             go

alter database Studio
             add file(name = FG3_File,filename='E:\DB\FG3_File.ndf');
             go

操作 1、

创建分区表,分如下几步

第一步 、

创建分区函数:

它用来把表从逻辑上分成不同的几份   如: 0~2014,2014~2015,2015~....

create partition function pf_for_myTable(datetime)
                           as range left
                           for values('2014-01-01','2015-01-01');
                           go  -- 把表从逻辑上分成三份。或是说三个不同的逻辑分区

SQL Server 分区表的创建方法与管理

第二步:

创建分区方案、它主要是把表的逻辑分区与数据库中的文件组绑定。比如说:第一个分区保存到FG1,第二个分区保存到FG2,第三个分区保存到FG3

create partition scheme ps_for_myTable
         as partition pf_for_myTable
         to (FG1,FG2,FG3);
         go

SQL Server 分区表的创建方法与管理

第三步:

建表

create table myTable2(DT datetime, DataValue nvarchar(30))
         on ps_for_myTable(DT);

操作 2、

查看指定数据所在的分区

$partition.partition_function_name(value);

select $partition.pf_for_myTable('2014-10-04');

SQL Server 分区表的创建方法与管理

操作 3、

为表添加新的分区。

第一步:修改分区方案

指定下一个分区使用的文件组。

alter partition scheme ps_for_myTable
                  next used [primary];
                  go

第二步:修改分区函数

alter partition function pf_for_myTable() -- 看到没有这个没有加datatime 加了就错了
                   split range ('2016-01-01');
                   go

操作 4、

移除分区

第一步:

alter partition function pf_for_myTable()
                   merge range('2016-01-01');
                   go

操作 5、

把分区移动到不同的表

前期准备工作

create table myTableHistory(DT datetime, DataValue nvarchar(30));
                                   go -- 两个表的定义要完全一样,分不分区的没有关系

第一步:

移动

alter table myTable2 switch partition 1

to myTableHistory;
                 go

                

它的基本语法如下:

                 alter table source_table_name switch  [partition partition_number]

                 to [schema.] target_table_name [partition partition_number]

总结: