一.分区表概念
1.1、什么是分区表
分区表是SQL Server2005新引入的概念,这个特性允许把逻辑上的一个表在物理上分为很多部分(即它允许将一个表存储在不同的物理磁盘里),分区表在逻辑上是一个表,而物理上是多个表。
1.2、分区与分表的区别
分区:就是把一张表的数据分成N个区块,从逻辑上看只是一张表,但底层是由N个物理区块组成的。
分表:就是把一张表按一定的规则分解成N个具有独立存储空间的实体表。
1.3、水平分表与垂直分表的区别
水平分表:将一张表中的数据分成多个表且表结构不变。
垂直分表:将一张表按照字段分成不同表且表结构发生改变。
二.分区表优点
2.1、使用多个文件分布数据到多个硬盘中,可以极大地提高IO性能,提升查询速度。
2.2、当一个分区出了问题,不会影响其他分区,仅仅是当前坏的分区不可用,提高了稳定性。
2.3、把一个大表分成若干个小表,则备份和恢复的时候不再需要备份整个表,可以单独备份分区,便于管理。
2.4、将一些不太常用的数据单独存档。
三.分区表使用场景
3.1、数据库中某个表的数据量很大,在查询数据时会明显感觉到速度很慢,这种情况可以考虑分区表。
3.2、数据是分段的,如以年份为分隔的数据,对于当前的数据经常进行增删改查操作,而对于往年的数据几乎不做操作或只做查询操作,这种情况可以考虑分区表。
3.3、对数据的操作如果只涉及一部分数据而非全部数据,这种情况可以考虑分区表。
3.4、如果一张表的数据经常进行增删改查操作,而不管年份之类的因素,这种情况最好不要考虑分区表。
四.创建分区表步骤
4.1、创建数据库文件组
4.2、创建数据库文件
注:应将文件组和文件存放于不同的硬盘甚至不同的服务器中,因为数据的读取瓶颈很大程度在于硬盘的读写速度,多个硬盘存储一个表可以实现负载均衡。
4.3、创建分区函数
即声明分区的标准
4.4、创建分区方案
即哪些区域使用哪个分区函数,形成完整的分区方案。
4.5、创建分区表
五.创建分区表实战演练
数据库:MingDataBaseOld 表:DtbUserLoginLog 分区规则:按照该表的时间划分,按天进行分区,设置5个边界值,对应5个分区。
5.1、数据库点击"右键"->"属性"。
5.2、点击"文件组"->"添加文件组"->分别建立FG20200706、FG20200707、FG20200708、FG20200707、FG20200710等5个文件组->"确定"。
5.3、点击"文件"->"添加"->分别建立FL20200706、FL20200707、FL20200708、FL20200709、FL20200710等5个文件->选择对应的文件组及存放路径->"确定"。
5.4、选中DtbUserLoginLog表,点击"右键"->"存储"->"创建分区"->"下一步"。
5.5、选中需要分区的列名。然后点击“下一步”。
5.6、输入分区函数名"DtbUserLoginLog_AddTime"->点击"下一步"。
5.7、输入分区方案名"DtbUserLoginLog_AddTime"->点击"下一步"。
5.8、映射分区范围选择"左边界"->点击"设置边界"->开始日期:"2020/07/06"、结束日期:"2020/07/10"、日期范围:"每天"->点击"确定"。
5.9、依边界值选择相对应的文件组->点击"预计存储空间"可查看行计数及空间信息->点击"下一步"。
5.10、选择"立即运行"->点击"下一步"->点击"完成"。
六.分区表检查
6.1、检查分区函数与分区方案
6.2、检查分区文件
七.分区表查询
7.1、查看分区及行计数
1 SELECT CONVERT(VARCHAR(50),A.NAME) Partition_Scheme,D.Partition_Number,CONVERT(VARCHAR(10),E.NAME) FileGroup, 2 CONVERT(VARCHAR(19),ISNULL(G.VALUE,''),120) Range_Boundary,STR(D.ROWS,9) Rows 3 FROM SYS.PARTITION_SCHEMES A INNER JOIN SYS.DESTINATION_DATA_SPACES B ON A.DATA_SPACE_ID=B.PARTITION_SCHEME_ID 4 INNER JOIN SYS.INDEXES C ON A.DATA_SPACE_ID=C.DATA_SPACE_ID 5 INNER JOIN SYS.PARTITIONS D ON B.DESTINATION_ID=D.PARTITION_NUMBER AND C.OBJECT_ID=D.OBJECT_ID AND C.INDEX_ID=D.INDEX_ID 6 INNER JOIN SYS.DATA_SPACES E ON B.DATA_SPACE_ID=E.DATA_SPACE_ID 7 INNER JOIN SYS.PARTITION_FUNCTIONS F ON A.FUNCTION_ID=F.FUNCTION_ID 8 LEFT JOIN SYS.PARTITION_RANGE_VALUES G ON F.FUNCTION_ID=G.FUNCTION_ID AND D.PARTITION_NUMBER-F.BOUNDARY_VALUE_ON_RIGHT=G.BOUNDARY_ID 9 WHERE C.OBJECT_ID=OBJECT_ID('DtbUserLoginLog') --分区表名 10 AND C.INDEX_ID IN (0,1) 11 ORDER BY Partition_Scheme,D.Partition_Number
7.2、查看文件及文件组
1 SELECT A.[NAME],A.PHYSICAL_NAME,A.[SIZE],A.GROWTH,B.[NAME] [FILEGROUP],B.IS_DEFAULT 2 FROM SYS.DATABASE_FILES A INNER JOIN SYS.FILEGROUPS B ON A.DATA_SPACE_ID=B.DATA_SPACE_ID
标签:分区,server,SYS,点击,分区表,sql,DATA,ID From: https://www.cnblogs.com/mingcore/p/17004660.html