留意到分区构架已成功创建。
第三步、定义分区表
有了分区函数与分区构架,下面就可以创建分区表了,表在创建的时候就要决定是否是分区表了。
虽然在大部分情况下,都是在发现表太大时,才想到要分区。但是分区表只能够在创建的时候指定为分区表。
CREATE TABLE OrderRecords ( Id int, OrderId int, SalesDate Date ) ON SchemaForParirion(SalesDate) --SchemaForPartition是刚刚定义的分区架构,括号内为指定的分区列
然后手工向数据库里面添加3条数据:
然后执行查询:
select convert(varchar(50), ps.name) as partition_scheme, p.partition_number, convert(varchar(10), ds2.name) as filegroup, convert(varchar(19), isnull(v.value, ''), 120) as range_boundary, str(p.rows, 9) as rows from sys.indexes i join sys.partition_schemes ps on i.data_space_id = ps.data_space_id join sys.destination_data_spaces dds on ps.data_space_id = dds.partition_scheme_id join sys.data_spaces ds2 on dds.data_space_id = ds2.data_space_id join sys.partitions p on dds.destination_id = p.partition_number and p.object_id = i.object_id and p.index_id = i.index_id join sys.partition_functions pf on ps.function_id = pf.function_id left join sys.partition_range_values v on pf.function_id = v.function_id and v.boundary_id = p.partition_number - pf.boundary_value_on_right where i.object_id = object_id('OrderRecords') --此处是表名 and i.index_id in ( 0, 1 ) order by p.partition_number
可以看到,分区起作用了:
四、分区表的分割
分区表的分割,相当于新建一个分区,将原有的分区需要分割的内容插入新的分区,然后删除老的分区的内容。
新加入多一个分割点:2009-01-01。如下图所示:
对于上图的操作,如果分割时,被分割的分区3内有内容需要分割到分区4,则这些数据需要被复制到分区4,并删除分区3上对应的数据。
这种操作非常非常消耗IO,并且在分割的过程中锁定分区3内的内容,造成分区3的内容暂时不可用。而且,这个操作生成的日志内容将会是被转移数据的4倍。
因此,最好在建表的时候,就要考虑到以后的分割点,比如预判到2014-01-01,2016-01-01。
分割现有的分区需要两个步骤:
- 首先要告诉SQL Server新建立的分区放到哪个文件组
- 建立新的分割点。
加一条数据,致使原表如下:
执行那个长查询,显示如下:
现在,可以执行分割操作了:
--分割出来的分区数据存在在哪个文件组 ALTER PARTITION SCHEME SchemaForParirion NEXT USED 'PRIMARY' --添加分割点 ALTER PARTITION FUNCTION fnPartition() SPLIT RANGE('2009-01-01')
执行完之后,再看结果如下:
五、分区表的合并
分区的合并可以旱作是分区分割的逆操作。分区的合并需要提供分割点,并且这个分割点必须在现有的分割表中已经存在,否则进行合并时就会报错。
例如,对以上例子,根据2009-01-01来进行合并:
合并分区操作:
--提供分割点,合并分区 ALTER PARTITION FUNCTION fnPartition() MERGE RANGE('2009-01-01')
再来看分区信息:
在这里应该注意到一个问题,假设已经合并了分区,那么合并之后,文件是存在分区3的文件组呢,还是分区4的文件组呢?这个取决于我们刚开始时定义的分区函数是left还是right。
如果定义的是left,则左边的分区3合并到分区4。如果是right,则右边的分区4合并到分区3.
到此这篇关于SQL Server分区表的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。