为什么要对表进行分区
使用表分区最主要是用于:
-
存档,比如将销售记录中1年前的数据分到一个专门存档的服务器中
-
便于管理,比如把一个大表分成若干个小表,则备份和恢复的时候不再需要备份整个表,可以单独备份分区
-
提高可用性,当一个分区跪了以后,只有一个分区不可用,其它分区不受影响
-
提高性能,这个往往是大多数人分区的目的,把一个表分布到不同的硬盘或其他存储介质中,会大大提升查询的速度
分区表的步骤
分区表的定义大体上分为三个步骤:
-
定义分区函数
-
定义分区构架
-
定义分区表
![](https://i-blog.csdnimg.cn/blog_migrate/cb56459a62a6b99adcf693569da796b2.png)
定义分区函数
分区函数是用于判定数据行该属于哪个分区,通过分区函数中设置边界值来使得根据行中特定列的值来确定其分区
![](https://i-blog.csdnimg.cn/blog_migrate/6b574c706508ba4a68d14500ab5c3582.png)
定义分区函数的原型如下:
CREATE PARTITION FOUNTION partition_function_name ( input_parameter_type )
AS RANGE [ LEFT| RIGHT](这个参数是决定临界值本身应该归于“left”还是“right”)
FOR VALUES( [ ,...n ] )
定义分区构架
分区构架中负责分配每个区属于哪个文件组
定义分区构架的原型如下:
CREATE PARTITION SCHEME partition_scheme_name
AS PARTITION partition_function_name
[ ALL ] TO ( { file_group_name | [ PRIMARY] } [ ,...n ] )
定义分区表
很多情况下都是你在发现已经表已经足够大的时候才想到要把表分区,但是分区表只能够在创建的时候指定为分区表
![](https://i-blog.csdnimg.cn/blog_migrate/720b344dccaa94edf8cc0fab409e7dd8.png)
分区表的分割
相当于新建一个分区,将原有的分区需要分割的内容插入新的分区,然后删除老的分区的内容
这种操作非常非常消耗IO,并且在分割的过程中锁定分区三内的内容,造成分区三的内容不可用。不仅仅如此,这个操作生成的日志内容会是被转移数据的4倍
分割现有的分区需要两个步骤:
1.首先告诉SQL SERVER新建立的分区放到哪个文件组
2.建立新的分割点
可以通过如下语句来完成:
分区的合并
分区的合并可以看作分区分割的逆操作。分区的合并需要提供分割点,这个分割点必须在现有的分割表中已经存在,否则进行合并就会报错
只需要使用merge参数:
假设分区3和分区4不再一个文件组,则合并后应该存在哪个文件组呢?
![](https://i-blog.csdnimg.cn/blog_migrate/1c7405e42a37647ca040b2da74d64247.png)