表分区涉及到几个关键概念:
第一步:创建文件和文件组,并将相应的文件挂入相应的文件组
--增加文件组并给文件组增加文件 ALTER DATABASE DEMO ADD FILEGROUP FILE_GROUP_1 ALTER DATABASE DEMO ADD FILEGROUP FILE_GROUP_2 ALTER DATABASE DEMO ADD FILEGROUP FILE_GROUP_3 --给各个文件组增加相应的数据文件ndf ALTER DATABASE DEMO ADD FILE (NAME=FG1_FILE, FILENAME='D:\DATA2\FG1_FILE.NDF', SIZE=1, MAXSIZE=UNLIMITED, FILEGROWTH=10% ) TO FILEGROUP FILE_GROUP_1 --第二个文件组 ALTER DATABASE DEMO ADD FILE (NAME=FG2_FILE, FILENAME='D:\DATA2\FG2_FILE.NDF', SIZE=1, MAXSIZE=UNLIMITED, FILEGROWTH=10% ) TO FILEGROUP FILE_GROUP_2 --第三个文件组 ALTER DATABASE DEMO ADD FILE (NAME=FG3_FILE, FILENAME='D:\DATA2\FG3_FILE.NDF', SIZE=1, MAXSIZE=UNLIMITED, FILEGROWTH=10% ) TO FILEGROUP FILE_GROUP_3
第二步:定义分区函数,定义如何根据某些列的值将表或索引的行映射到指定分区。分区函数制定了分区的方式。
USE DEMO CREATE PARTITION FUNCTION pf_OrderDate (datetime) AS RANGE RIGHT FOR VALUES ('2006/01/01', '2007/01/01') GO
注解:datetime是分区依据字段的数据类型,RIGTH是第一个分区小于边界,第二个分区大于等于边界,依次类推, VALUES是各个边界
FILE_GROUP_1 1 (过去某年, 2006/01/01) FILE_GROUP_2 2 [2006/01/01, 2007/01/01) FILE_GROUP_3 3 [2007/01/01,未来某年)
第三步:定义分区方案,负责分配分区函数中设定的每个分区属于哪个文件组
USE DEMO CREATE PARTITION SCHEME ps_OrderDate AS PARTITION pf_OrderDate TO (FILE_GROUP_1,FILE_GROUP_2,FILE_GROUP_3); GO
第四步:创建分区表并将其绑定到分区方案上,表在创建的时候就已经决定是否是分区表了。
USE DEMO CREATE TABLE ORDERS ( ORDER_ID INT, ORDER_DATE DATETIME NOT NULL, CUSTOMER_ID INT NOT NULL ) ON ps_OrderDate(ORDER_DATE) USE DEMO CREATE TABLE ORDERS_HISTRORY ( ORDER_ID INT, ORDER_DATE DATETIME NOT NULL, CUSTOMER_ID INT NOT NULL ) ON ps_OrderDate(ORDER_DATE)
第五步:按分区进行查询数据
USE DEMO SELECT * FROM ORDERS WHERE $PARTITION.pf_OrderDate (ORDER_DATE)=3;
注解:$PARITITION.pf_OrderDate (ORDER_DATE)=3 表示查询第三个分区
第六步:分区表中的数据按区进行备份(归档)
扫描二维码关注公众号,回复:
648984 查看本文章
USE DEMO go alter table orders switch partition 1 to orders_histrory partition 1 go
主要参考文章, 推荐文章:
参考文献1: 深入分析SQL SERVER 2008 分区函数和分区表
参考文献2:SQL SERVER 分区具体例子讲解
参考文献3: SQL SERVER分区分表水平
参考文献4: SQL SERVER磁盘空间告急(扩容)